Python 为什么赢了';t Tkinter可执行文件捕获密钥组合?
我正在Python3.7上构建一个tkinter应用程序,并在Windoows 10中使用Pyinstaller 3.5创建一个.exe。从IDE运行代码时,所有预期的键盘命令都能正常工作。但是,在可执行文件中,当单次按键时,组合键不起作用 下面是一些演示问题的测试代码:Python 为什么赢了';t Tkinter可执行文件捕获密钥组合?,python,tkinter,pyinstaller,Python,Tkinter,Pyinstaller,我正在Python3.7上构建一个tkinter应用程序,并在Windoows 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
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()
将tkinter作为tk导入
root=tk.tk()
txt=tk.StringVar()
lbl=tk.Label(根,textvariable=txt)
def钥匙手柄(事件):
全局文本
txt.set(event.keysym)
def kc_句柄(事件):
tk.messagebox.showinfo('组合键','按下组合键')
root.bind(“”,键\u句柄)
root.bind(“”,kc_句柄)
lbl.pack()
root.mainloop()
然后调用Pyinstaller作为Pyinstaller-w-F key\u test.py
我知道的一件事是,绑定的顺序似乎没有什么区别。如何使组合键在可执行文件中工作?
IDLE
是使用tkinter
构建的,它可以导入所有需要的模块供自己使用,并且您的代码可以正常工作,但是当您在没有IDLE
的情况下运行它时,您必须导入代码中使用的所有模块。在您的示例中,它将是
import tk.messagebox
顺便说一句:类似的问题通常出现在
mainloop()
上IDLE
aready运行mainloop()
,因此代码可以在没有自己的mainloop()的情况下工作。但通常(没有IDLE
)它需要使用mainloop()
。检查terminal/console/cmd.exe中的代码以查看是否有错误是很好的。您是否在terminal/console/cmd.exe中运行了.exe以查看是否显示错误消息?如果删除bind(“”)
?当我运行它(没有空闲)时,我得到了一个错误“tkinter”没有属性“messagebox”
,因为你忘记了导入tkinter.messagebox
。IDLE是使用tkinter
构建的,它可以导入它供自己使用,并且您的代码可以在没有此导入的情况下工作,但它将无法正常工作。从终端运行可执行文件不会给出任何错误消息。导入tkinter.messagebox
确实为我修复了测试代码。此解决方案也适用于原始应用程序。(在应用程序中,我使用的是tkinter.simpledialog
)