TKinter 应用程序在 Visual Studio 代码中运行良好,但作为 .exe 崩溃

TKinter application runs perfectly fine in Visual Studio Code but crashes as an .exe

我有一个 TKinter 应用程序,我将其放在 Visual Studio 代码中。它 运行 在 Visual Studio 代码中非常好并且不会冻结或类似的东西。因为我希望我的程序也能在其他电脑上运行 运行,所以我通过 运行ning

使用 pyinstaller 创建了一个 .exe 文件
pyinstaller --onefile -w "main.py"

这会毫无问题地创建所需的 .exe 文件。可悲的是,当放入 .exe 文件时,我的程序经常崩溃,崩溃是指 window 不再响应,或者 window 只是在一段时间后自行关闭。 我不知道这是否是一个常见问题,但老实说我不知道​​该怎么办。 显然我的代码没有任何问题,因为它 运行 在 Visual Studio 代码中完全没问题。

有什么我可以做的吗?

编辑 1: 我的 window 在我的代码的这些行周围冻结: 我正在尝试使用 for 循环创建 4 个比例:

for i in range(4):
    scale = tk.Scale(self.root, state = "disabled", from_ = 100, to = 0)
    scale.place(rely=0.2,relx=i*0.25,relwidth=0.25, relheight=0.8)
    self.scales.append(scale)

我也尝试将我的体重秤放入列表 self.scales 以便我以后可以使用我的体重秤。该程序创建前三个比例没有任何问题,但经常无法创建第四个。

编辑 2: 我想我找到了一个解决方案:也许 for 循环对于 Tkinter 来说太快了,它不能那么快地创建 GUI 项目,我补充道

time.sleep(0.1)

我的 for 循环,现在,这似乎有效。但我真的不知道它是否应该如此。

编辑 3: 没关系,这并没有解决问题。这个问题与创建尺度有关。 我真的不知道该怎么办。

查看附带的 Logging, and the tutorial。格式化写入文件后,您可以在此处和此处放置一些 logging.info(),这有助于确定错误的根本原因。

import logging

logging.basicConfig(filename='log.txt',
                    filemode='a',
                    format='%(asctime)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    level=logging.INFO)

def my_func(x, y):

    logging.info('Accessing Function: my_func()')

    z = x + y

    logging.info(f'Function myfunc() Successfully Completed, Variable Values: {x}, {y}, {z}')


my_func(2, 7)

现在您有一个方便的 log.txt 文件可以用来诊断。

编辑

使用您提供的代码行,我尝试了以下操作:

import tkinter as tk


class Application(tk.Frame):
    def __init__(self, root=None):
        super().__init__(root)
        self.root = root
        self.root.geometry('720x450')
        self.pack()
        self.scales = []
        self.create_scale()

    def create_scale(self):
        for i in range(4):
            scale = tk.Scale(self.root, state="disabled", from_=100, to=0)
            scale.place(rely=0.2, relx=i*0.25, relwidth=0.25, relheight=0.8)
            self.scales.append(scale)


gui = tk.Tk()
app = Application(root=gui)
app.mainloop()

我用 PyInstaller 4.1、Python 3.9 制作了一个 exe,所有四个比例都在我的屏幕上正确生成,所以问题不在于那些特定的代码行,而是它们如何与你的其余部分交互代码。

我可以尝试找出您问题的根源,但我需要查看您的完整代码或成功模拟您遇到的相同问题的 minimal, reproducible example