【发布时间】:2021-04-10 14:43:32
【问题描述】:
谁能解释为什么程序运行时会打印“hello”?我原以为只有 welcome_frame 会运行,因为那是已经提出的框架,但似乎并非如此。
那么为什么在我启动程序时所有类都会立即运行,我该如何阻止这种情况发生?
我想要的是在welcome_frame 中按下一个按钮,它会导致edit_booking_frame 中的所有内容都运行。
谢谢你:)
# import tkinter modules
from tkinter import *
from tkinter import ttk
# define self
class tkinterApp(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
# creating a container
container = Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
# initialising frames to an empty array
self.frames = {}
for F in (welcome_frame, edit_booking_frame):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row = 0, column = 0, sticky = "nsew")
self.show_frame("welcome_frame")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class welcome_frame(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
class edit_booking_frame(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
print("hello") ### WHY IS THIS PRINTED???
if __name__ == "__main__":
app = tkinterApp()
app.geometry("1000x800")
app.mainloop()
【问题讨论】:
-
在 for 循环中有这一行:
F(parent=container, controller=self),当F为edit_booking_frame时,它调用edit_booking_frame的构造函数,即__init__方法。 -
在代码中,所有帧都将被初始化,但屏幕上只显示顶部帧。通过在您的
show_frame方法中调用.tkraise(),您可以将该框架设置为最上面的框架,因此其余的都在它下面。
标签: python python-3.x class tkinter