繁体   English   中英

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

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

我有一个 TKinter 应用程序,我将它放在 Visual Studio Code 中。 它在 Visual Studio Code 中运行得非常好,并且不会冻结或类似的东西。 因为我希望我的程序也可以在其他电脑上运行,所以我使用 pyinstaller 通过运行创建了一个 .exe 文件

pyinstaller --onefile -w "main.py"

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

有什么我可以做的吗?

编辑 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和随附的教程 格式化写入文件后,您可以在这里和那里放置一些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,所有四个刻度都在我的屏幕上正确生成,所以问题不在于这些特定的代码行,而是它们如何与代码的 rest 交互。

我可以尝试找出问题的根源,但我需要查看您的完整代码或成功模仿您遇到的相同问题的最小、可重现的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM