这是一个非常糟糕的主意,多次使用Tk()
更在你的程序。使用它来创建根窗口,然后使用Toplevel()
来创建任何其他窗口。
def buttonFunc(self, event):
Toplevel(self.root)
这就是说,它仍然看起来像你试图做一些艰难的事情。你能更好地描述你的最终目标是什么吗?
要进行模态窗口(弹出)使用这样的代码:
try: #python3 imports
import tkinter as tk
except ImportError: #python3 failed, try python2 imports
import Tkinter as tk
class Main(tk.Frame):
def __init__(self, master=None, **kwargs):
tk.Frame.__init__(self, master, **kwargs)
lbl = tk.Label(self, text="this is the main frame")
lbl.pack()
btn = tk.Button(self, text='click me', command=self.open_popup)
btn.pack()
def open_popup(self):
print("runs before the popup")
Popup(self)
print("runs after the popup closes")
class Popup(tk.Toplevel):
"""modal window requires a master"""
def __init__(self, master, **kwargs):
tk.Toplevel.__init__(self, master, **kwargs)
lbl = tk.Label(self, text="this is the popup")
lbl.pack()
btn = tk.Button(self, text="OK", command=self.destroy)
btn.pack()
# The following commands keep the popup on top.
# Remove these if you want a program with 2 responding windows.
# These commands must be at the end of __init__
self.transient(master) # set to be on top of the main window
self.grab_set() # hijack all commands from the master (clicks on the main window are ignored)
master.wait_window(self) # pause anything on the main window until this one closes
def main():
root = tk.Tk()
window = Main(root)
window.pack()
root.mainloop()
if __name__ == '__main__':
main()
我觉得你正在接近错误的问题。你的tkinter GUI应该只有1个主循环。你的'win2'类没有做任何事情。我建议找到一个简单的tkinter示例并从那里开始工作。另外,PyQt是GUI的另一个选项 –