Python 如何在具有多个页面的tkinter应用程序中获取按钮单击的输入值?
单击按钮Python 如何在具有多个页面的tkinter应用程序中获取按钮单击的输入值?,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,单击按钮Run时,我想从Tkinter应用程序的Page2获取当前输入值 请帮忙 我的代码: import tkinter as tk from tkinter import ttk from tkinter import RAISED LARGEFONT =("Verdana", 35) class tkinterApp(tk.Tk): # __init__ function for class tkinterApp def __init__(sel
Run
时,我想从Tkinter应用程序的Page2
获取当前输入值
请帮忙
我的代码:
import tkinter as tk
from tkinter import ttk
from tkinter import RAISED
LARGEFONT =("Verdana", 35)
class tkinterApp(tk.Tk):
# __init__ function for class tkinterApp
def __init__(self, *args, **kwargs):
# __init__ function for class Tk
tk.Tk.__init__(self, *args, **kwargs)
# creating a container
container = tk.Frame(self)
container.pack(side = "top", fill = "both", expand = True)
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0, weight = 1)
container2 = tk.Frame(self, relief=RAISED, borderwidth=2)
container2.pack(side="bottom",fill="both", expand=True)
container2.grid_rowconfigure(0, weight = 1)
container2.grid_columnconfigure(0, weight = 1)
def runStadiumpy():
pass
#get all entry value from page 2
runButton = ttk.Button(container2, text="Run", command=runStadiumpy)
runButton.pack(side="left", padx=5, pady=5)
# initializing frames to an empty array
self.frames = {}
# iterating through a tuple consisting
# of the different page layouts
for F in (StartPage, Page1, Page2):
frame = F(container, self)
# initializing frame of that object from
# startpage, page1, page2 respectively with
# for loop
self.frames[F] = frame
frame.grid(row = 0, column = 0, sticky ="nsew")
self.show_frame(StartPage)
# to display the current frame passed as
# parameter
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
# first window frame startpage
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# label of frame Layout 2
label = ttk.Label(self, text ="Startpage", font = LARGEFONT)
# putting the grid in its place by using
# grid
label.grid(row = 0, column = 2, padx = 10, pady = 10)
button1 = ttk.Button(self, text ="Page 1",
command = lambda : controller.show_frame(Page1))
# putting the button in its place by
# using grid
button1.grid(row = 1, column = 1, padx = 10, pady = 10)
## button to show frame 2 with text layout2
button2 = ttk.Button(self, text ="Page 2",
command = lambda : controller.show_frame(Page2))
# putting the button in its place by
# using grid
button2.grid(row = 2, column = 1, padx = 10, pady = 10)
# second window frame page1
class Page1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text ="Page 1", font = LARGEFONT)
label.grid(row = 0, column = 2, padx = 10, pady = 10)
# button to show frame 2 with text
# layout2
button1 = ttk.Button(self, text ="StartPage",
command = lambda : controller.show_frame(StartPage))
# putting the button in its place
# by using grid
button1.grid(row = 1, column = 1, padx = 10, pady = 10)
# button to show frame 2 with text
# layout2
button2 = ttk.Button(self, text ="Page 2",
command = lambda : controller.show_frame(Page2))
# putting the button in its place by
# using grid
button2.grid(row = 2, column = 1, padx = 10, pady = 10)
# third window frame page2
class Page2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text ="Page 2", font = LARGEFONT)
label.grid(row = 0, column = 2, padx = 10, pady = 10)
# button to show frame 2 with text
# layout2
button1 = ttk.Button(self, text ="Page 1",
command = lambda : controller.show_frame(Page1))
# putting the button in its place by
# using grid
button1.grid(row = 1, column = 1, padx = 10, pady = 10)
# button to show frame 3 with text
# layout3
button2 = ttk.Button(self, text ="Startpage",
command = lambda : controller.show_frame(StartPage))
# putting the button in its place by
# using grid
button2.grid(row = 2, column = 1, padx = 10, pady = 10)
lbl1 = ttk.Label(self, text="Question:")
lbl1.grid(row = 3, column = 1, padx = 10, pady = 10)
entry1 = ttk.Entry(self)
entry1.grid(row = 3, column = 2, padx = 10, pady = 10)
entry1.insert(0,"abc")
# Driver Code
app = tkinterApp()
app.mainloop()
这对您很有用:-
def runStadiumpy():
value = entry1.get()
return value
在课堂
Page2
中为您的条目保留一个参考,例如:
class Page2(tk.Frame):
def __init__(self, parent, controller):
......
self.entry1 = ttk.Entry(self)
self.entry1.grid(row = 3, column = 2, padx = 10, pady = 10)
self.entry1.insert(0,"abc")
由于您将这些框架保存在您的self.frames
中,因此您可以通过self.frames[Page2]
访问Page2
。为您的条目添加引用后,使用self.frames[Page2].entry1
直接获取条目
因此,在添加上面的代码后,在函数runStadiumpy()
中使用下面的代码:
您将在第2页中获得内容,但类
tkinterApp
中未定义entry1
!尝试将该功能块写入类Page2
中!但我希望此功能可以跨页面使用。您可以导航到Page2类,然后从中提取值。尝试在runStadiumpy()中使用var=self.frames[Page2]
,然后使用var.entry1.get()
获取值。
def runStadiumpy():
print(self.frames[Page2].entry1.get())