[英]Tkinter - How can I open a window by clicking a button?
在尝试使用 EasyGUI 制作游戏后,我发现它不会做对游戏很重要的事情,所以我开始使用 Tkinter。 但是,我遇到了另一个我不知道如何解决的问题。 这是代码:
money = Button(box2, text = "Get Money", highlightbackground = "yellow", command = close_parentg)
def moneywindow():
parent.destroy() # The button is inside the parent.
Money.mainloop() # This is the window I want to open.
destroy() 命令工作正常,因为当我按下按钮时,第一个窗口关闭,但是如果我运行该程序,即使我没有告诉它(或者我至少认为我没有告诉它),第二个窗口也会弹出)。
如何阻止第二个窗口在开始时弹出并仅在单击按钮时显示?
mainloop()
不是创建窗口的原因。 创建窗口的唯一两种方式是在程序开始时创建Tk
的实例,以及在程序运行时创建Toplevel
实例。
您的 GUI 应该只调用mainloop()
一次,并且它应该在应用程序的整个生命周期内保持运行。 它会在您销毁根窗口时退出,而 tkinter 被设计为在您销毁根窗口时,程序退出。
一旦你这样做了,除非你用Toplevel
显式地创建它们,否则不会弹出任何窗口。
下面是一个示例,它允许您创建多个窗口,并使用lambda
为每个窗口提供一个可自行销毁的按钮。
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
new_win_button = tk.Button(self, text="Create new window",
command=self.new_window)
new_win_button.pack(side="top", padx=20, pady=20)
def new_window(self):
top = tk.Toplevel(self)
label = tk.Label(top, text="Hello, world")
b = tk.Button(top, text="Destroy me",
command=lambda win=top: win.destroy())
label.pack(side="top", fill="both", expand=True, padx=20, pady=20)
b.pack(side="bottom")
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.