【发布时间】:2019-12-14 20:15:48
【问题描述】:
我正在 Python 3.7 上构建一个 tkinter 应用程序,并在 Windows 10 中使用 Pyinstaller 3.5 创建一个 .exe。从 IDE 运行代码时,所有预期的键盘命令都按预期工作。但是,在可执行文件中,组合键不起作用,而单键按下是可以的。
下面是一些演示问题的测试代码:
import tkinter as tk
root = tk.Tk()
txt = tk.StringVar()
lbl = tk.Label(root, textvariable=txt)
def key_handle(event):
global txt
txt.set(event.keysym)
def kc_handle(event):
tk.messagebox.showinfo('Key Combo', 'Key Combo pressed')
root.bind('<Key>', key_handle)
root.bind('<Alt-b>', kc_handle)
lbl.pack()
root.mainloop()
Pyinstaller 然后以pyinstaller -w -F key_test.py 调用。
我知道的一件事是绑定的顺序似乎没有什么区别。如何让组合键在可执行文件中起作用?
【问题讨论】:
-
您是否在终端/控制台/cmd.exe 中运行 .exe 以查看它是否显示错误消息?如果您删除
bind('<Key>')会怎样? -
当我运行它(没有 IDLE)然后我得到错误
'tkinter' has no attribute 'messagebox',因为你忘记了import tkinter.messagebox。 IDLE 是使用tkinter构建的,它可以将其导入以供自己使用,并且您的代码可以在没有此导入的情况下工作,但它将无法正常工作。 -
从终端运行可执行文件没有给出任何错误消息。导入
tkinter.messagebox确实为我修复了测试代码。此解决方案也适用于原始应用程序。 (在我使用的应用程序中tkinter.simpledialog。)
标签: python tkinter pyinstaller