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。
我有一个 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。