簡體   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