Python函数启动tkinter应用异常:主应用仅保留按钮问题求助
问题解决办法
核心问题有两个:
- 按钮的
command参数写法错误,导致初始化时就执行了迷你应用,而非点击时触发 - 迷你应用用
tk.Tk()创建新窗口,会启动第二个主事件循环,和原窗口循环冲突,造成原窗口内容异常
修改步骤:
- 修正
pages.py中的pge1函数:
把tk.Tk()换成tk.Toplevel(),并且移除win.mainloop()(原窗口已经在运行主循环,不需要额外启动):
import platform as pf import tkinter as tk def pge1(): win = tk.Toplevel() # 改用Toplevel创建子窗口 win.title('test mini app') # 不需要再调用win.mainloop()
- 修正
main.py中的按钮绑定:
把command=pgs.pge1()改成command=pgs.pge1(去掉括号,传递函数引用而非立即执行):
import tkinter as tk import platform as pf import pages as pgs class Page(tk.Frame): def __init__(self, *args, **kwargs): tk.Frame.__init__(self, *args, **kwargs) def show(self): self.lift() class Page1(Page): def __init__(self, *args, **kwargs): Page.__init__(self, *args, **kwargs) label = tk.Label(self, text="This is page 1") label.pack(side="top", fill="both", expand=True) bttn = tk.Button(text="mini app", command=pgs.pge1) # 去掉括号 bttn.pack() os = tk.Label(self, text='your os type is : ' + pf.system()) os.pack() version = tk.Label(self, text='your os verison is : ' + pf.version()) version.pack() processor = tk.Label(self, text='your processor is : ' + pf.processor()) processor.pack()
这样修改后,点击按钮会弹出独立的迷你应用窗口,原窗口的内容也不会消失。
内容的提问来源于stack exchange,提问作者hypercoder
相关产品推荐
相关产品推荐

