Python Tkinter运行主文件时导入的子窗口先启动如何解决
问题根因
Python导入模块时,会从头到尾执行被导入模块顶层的所有代码。你当前的Hb_test.py文件末尾直接写了创建Tk根窗口、实例化Hba类、启动mainloop()事件循环的顶层代码,这部分代码不属于类定义的内部逻辑,当kill_app.py执行from Lab.Hb_Test import Hba导入语句时,就会直接触发这部分代码运行,因此会先弹出Hb_test对应的窗口,只有手动关闭该窗口、终止它的mainloop()循环后,才会继续执行主文件的窗口创建逻辑。
修复方案
将Hb_test.py中仅用于单独测试运行的窗口启动逻辑,放到if __name__ == "__main__":判断块中。该判断块的作用是:只有直接运行当前Python文件时,块内代码才会执行;当文件被其他模块导入时,块内代码不会触发。
修改后的Hb_test.py完整代码如下:
from tkinter import* from tkinter import ttk class Hba: def __init__(self,root): self.root = root self.root.geometry("300x70+200+200") self.root.title("JIBAN PRABHA PATHOLAB") bg_color = "#074463" Hb = LabelFrame(self.root,text="BLOOD TEST",font=("ALGERIAN",15,"bold") ,fg="gold",bg=bg_color) Hb.place(x=0,y=0) self.hb_neu_lbl = Label(Hb,text="Hb%(sahils) Test",bg=bg_color,fg="white",font=("Bell MT",15,"bold")).grid(row=1,column=1,padx=5,pady=5) self.hb_neu=Entry(Hb,width=10,font="BellMT 15",bd=5,relief=SUNKEN).grid(row=1,column=2,padx=5,pady=5) if __name__ == "__main__": root = Tk() obj = Hba(root) root.mainloop()
额外注意事项
- 单个Tkinter应用只能存在一个
Tk()根窗口实例和一个mainloop()主事件循环,如果你后续需要在主程序kill_app.py中嵌入Hba类对应的功能模块,不要在Hba类中重复创建Tk()根窗口,应当将对应组件作为主窗口的子组件加载,需要弹出独立窗口时使用Toplevel()创建子窗口即可,避免多根窗口引发的程序异常。
内容的提问来源于stack exchange,提问作者S.s
相关产品推荐
相关产品推荐

