You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:15:42