Python / Tkinter:顺序打开多个窗口(并共享信息?)

问题描述 投票:0回答:1

我正在尝试使用两个带有Tkinter的窗口:出现一个欢迎窗口,当单击一个按钮时,另一个窗口打开(欢迎窗口关闭)。但是,目前第一个窗口没有显示,因此程序无法验证条件并转到第二个窗口。 (如果条件不存在则显示,但在这种情况下两个窗口同时出现)

welWindow=New_Toplevel_1(Tk())
#wait until welWindow.getGo()==1
while welWindow.getGo()!=1:
    time.sleep(1)
#my variables get values from welWindow's variables
welWindow.destroy()
labWindow=(Tk())
labWindow.mainloop()

我的New_Toplevel_1类中的destroy函数:

def destroy(self):
    self.top.destroy()

(top是构造函数中使用的Tk())

你可能已经猜到我对此很新,欢迎提出所有提示/建议:)

python tkinter
1个回答
1
投票

虽然我没有说你的代码必须类似下面的代码,因为相同的行为可以用不同的方式和样式编写,它会做你想要的。

我在你的代码中看到了两三个基本错误。

您通过调用Tk()将主根窗口作为参数传递。这是错误的,因为应该只有一个Tk实例,在你的tkinter程序中使用TK()调用。给它一个名称,例如root,并使用它们的引用。

其次,你没有看到任何东西,因为你没有调用mainloop()永远睡觉,你应该,否则你的程序将不会更新UI,也不会响应事件。

mainloop是qzxswpoi实例的tkinter的eventloop。因此,使用所有小部件设置完整的UI,并确保代码到达并结束语句调用Tk

此外,您通常不需要调用root.mainloop(),这是一个阻止功能。任何阻塞功能也会阻止主循环,禁止更新和事件接收,直到它返回。

现在遵循一些代码

sleep()

关于为GUI代码提供一些结构,当你开始学习tkinter时,看看这个from tkinter import ttk, Tk, Toplevel root = Tk() welcome_window = Toplevel(root) welcome_window.title('Welcome') lab_window = Toplevel(root) lab_window.title('Lab') root.withdraw() # hide root window lab_window.withdraw() # hide lab window def goto_lab(): welcome_window.destroy() lab_window.deiconify() # show lab window button1 = ttk.Button(welcome_window, text='Close',\ command=goto_lab) button1.pack(padx=100, pady=50) button2 = ttk.Button(lab_window, text='Close',\ command=quit) button2.pack(padx=100, pady=50) root.mainloop()

© www.soinside.com 2019 - 2024. All rights reserved.