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

PyInstaller打包Tkinter程序后窗口循环创建问题求助

问题解决:PyInstaller打包Tkinter程序后不断创建窗口

问题现象

  • 在IDLE中运行System-Toolkit.py完全正常,无任何报错
  • 使用命令pyinstaller --onefile -w System-Toolkit.py(注:原命令中的pyinstall为拼写错误)打包无报错,但运行打包后的程序会不断创建窗口,仅在任务管理器关闭其中一个窗口后,才会显示正常界面
  • 尝试用input()保持窗口或调整root.destroy()位置均无效

核心原因

代码缺少if __name__ == "__main__":的入口保护逻辑。PyInstaller打包时,主脚本会被作为模块导入执行,没有这个判断的话,创建窗口的代码会被重复触发,导致无限生成新窗口。

修复后的完整代码

import platform
import psutil
import cpuinfo
import wmi
import selenium
from tkinter import *

class Window(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master, bg="#393939")
        self.master = master
        self.pack(fill=BOTH, expand=1)

        text = Label(self, text="Version (0.0.0)", bg="#393939", fg="#f73030", font=("Helvetica", 12, "bold"))
        text.pack(padx=0,pady=0, anchor="w")

        text = Label(self, text="System Toolkit", bg="#393939", fg="#f73030", font=("Helvetica", 32, "bold"))
        text.pack(padx=12,pady=10)
        
        text = Label(self, text="Operating System: ", bg="#393939", fg="#30F752", font=("Helvetica", 18))
        text.pack(padx=12,pady=10)

        ostype = f"{platform.architecture()}"
        text = Label(self, text="Architecture:   " + str(ostype), bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")

        net = f"{platform.node()}"
        text = Label(self, text="Network Name:   " + str(net), bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")

        processor = f"{platform.platform()}"
        text = Label(self, text="Version:   " + str(processor), bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")

        text = Label(self, text="CPU: ", bg="#393939", fg="#30F752", font=("Helvetica", 18))
        text.pack(padx=12,pady=10)
        
        mycpu = cpuinfo.get_cpu_info()

        text = Label(self, text="Model:   " + mycpu['brand_raw'], bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")

        process = f"{platform.processor()}"
        text = Label(self, text="Model Info:   " + str(process), bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")

        text = Label(self, text="Clock Speed:   " + mycpu['hz_actual_friendly'], bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")


        text = Label(self, text="RAM: ", bg="#393939", fg="#30f752", font=("Helvetica", 18))
        text.pack(padx=12,pady=10)

        ram = f"{psutil.virtual_memory().total / 1024 / 1024 / 1024:.2f}Gb \n"
        text = Label(self, text="Total:   " + str(ram), bg="#393939", fg="white", font=("Helvetica", 18))
        text.pack(padx=20,pady=10, anchor="w")

# 添加入口保护,避免打包后重复执行创建窗口的逻辑
if __name__ == "__main__":
    root = Tk()
    app = Window(root)
    root.wm_title("System Toolkit - (v0.0.0")
    #root.wm_attributes('-transparentcolor', '#ab23ff')
    root.geometry("800x600")
    root.mainloop()
    # mainloop结束后窗口已自动销毁,无需额外调用destroy()

额外说明

  1. 打包命令需修正为pyinstaller --onefile -w System-Toolkit.py,原命令中的pyinstall是拼写错误
  2. root.destroy()可以删除,因为mainloop()会在窗口关闭后才结束,此时窗口已自动销毁

内容的提问来源于stack exchange,提问作者Galactic Geek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:05:17