来自 tkinter gui 的 .exe 不运行(pyinstaller)

Posted

技术标签:

【中文标题】来自 tkinter gui 的 .exe 不运行(pyinstaller)【英文标题】:.exe from tkinter gui does not run (pyinstaller) 【发布时间】:2020-10-27 08:25:49 【问题描述】:

阅读一些线程帮助我从我的 tkinter gui 创建了一个 .exe。

不幸的是,当我运行 .exe 文件时没有任何反应。当我在 vsc 中运行时,代码运行正常。

按照网上的说明,我做了以下步骤。

    我打开了命令提示符,用cd filelocation 移动到我的文件位置 我运行了命令pyinstaller name-of-my-file.py(例如,也尝试了--onefile规范。) 我得到了三个文件夹 pycache、dist 和 build,在 build 中我找到了各自的 .exe 文件。

如上所述,当我运行 .exe 文件时没有任何反应。还尝试以管理员身份运行它。

以防万一,我将在下面发布我的代码。

感谢各种帮助。

from tkinter import *
from tkinter import messagebox
import time
import datetime

def clicked(event=None):
    t = presentationDuration.get()
    try:
        t = float(t)
    except ValueError:
        messagebox.showerror(title='ValueError', message='The string is empty or there is no number entered!')  
        return
    nSpeaker = nextSpeaker.get()
    lbl.configure(text = nSpeaker, font = ("Arial Bold", 80))
    t = int(t*60)
    update(t)
    
def update(t):
    if(t >= 0):
        m,s = divmod(t, 60)
        left_Time.configure(text = m)
        right_Time.configure(text = s)
    if(t <= 60):
        nSpeaker = nextSpeaker.get()
        lbl.configure(text = nSpeaker, bg = 'red', font = ("Arial Bold", 80))
 
    window.after(1000, update, t-1)

window = Tk()
window.title("presenters Toolkit")
 
lbl_duration = Label(window, text = "duration [mins]")
lbl_duration.grid(column = 0, row = 0)
 
presentationDuration = Entry(window, width = 10)
presentationDuration.grid(column = 1, row = 0)
 
lbl_speaker = Label(window, text = "next Speaker")
lbl_speaker.grid(column = 2, row = 0)
 
nextSpeaker = Entry(window, width = 30)
nextSpeaker.grid(column = 3, row = 0)
 
lbl = Label(window, text = "", font = ("Arial Bold", 50))
lbl.grid(column = 1, row = 1)
 
btn = Button(window, text = "start", command = clicked)
btn.grid(column = 1, row = 3)
 
left_Time = Label(window, text ="--", font = ("Arial Bold", 80))
left_Time.grid(column = 0, row = 4)
 
mid_Time = Label(window, text = ":", font = ("Arial Bold", 80))
mid_Time.grid(column = 1, row = 4)
 
right_Time = Label(window, text = "--", font = ("Arial Bold", 80))
right_Time.grid(column = 2, row = 4)
 
window.mainloop()

【问题讨论】:

我在尝试执行您的代码时收到NameError: name 'clicked' is not defined 在线btn = Button(window, text = "start", command = clicked) 尝试将函数 defs 移到这些元素的声明之前。 我只是想知道为什么OP说代码运行正常,当我在vsc中运行时。 尝试分别运行前三行代码,然后运行整个代码 您不应在build 目录中使用exe。如果使用--onedir 编译,则使用dist 目录内的目录;如果使用--onefile 编译,则使用dist 目录内的exe 【参考方案1】:

您需要移动上面的函数代码,以便它们的代码可以在例如导入之后运行。此外,在t = float(presentationDuration.get ()) 行中运行代码时,我发现了一个错误,与t = float(presentationDuration.get()) 为空时,单击按钮ValueError: could not convert string to float 时抛出异常有关。所以我建议你处理这种情况。下面是我看到的clicked 函数的代码。对不起,我的英语不是我的母语。

def clicked(event=None):
    t = presentationDuration.get()
    try:
        t = float(t)
    except ValueError:
        messagebox.showerror(title='ValueError', message='The string is empty or there is no number entered!')  # also you should have such line in your code `from tkinter import messagebox`
        return
    nSpeaker = nextSpeaker.get()
    lbl.configure(text = nSpeaker, font = ("Arial Bold", 80))
    t = int(t*60)
    update(t)

【讨论】:

非常感谢您对代码的建议。在此之后,我将更新我上面的代码,以使其对其他人更容易。虽然它确实改进了我的代码,但不幸的是它并没有解决我的 .exe 文件无法运行的问题。

以上是关于来自 tkinter gui 的 .exe 不运行(pyinstaller)的主要内容,如果未能解决你的问题,请参考以下文章

Python tkinter怎么才能脱离黑窗口?

在 Tkinter 中执行函数期间程序冻结

为啥我的python GUI不能用?

如何让 TkInter GUI(不是 shell 提示符)监听来自 /dev/stdin 的输入

Python GUI编程(Tkinter) windows界面开发

使用 crontab 运行 tkinter GUI