为什么Tkinter可执行文件不捕获键组合?

时间:2019-12-14 20:15:48

标签: python tkinter pyinstaller

我正在Python 3.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(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 -w -F key_test.py的身份调用Pyinstaller。

我知道的一件事是绑定的顺序似乎没有什么不同。如何在可执行文件中使用组合键?

1 个答案:

答案 0 :(得分:1)

IDLE是使用tkinter构建的,它可以导入所有需要的模块供自己使用,并且您的代码可以正常工作,但是如果在没有IDLE的情况下运行它,则必须导入所有模块您在代码中使用的代码。在您的示例中,将是

import tk.messagebox

顺便说一句:mainloop()通常是类似的问题。 IDLE Aready运行mainloop(),因此代码可以在没有自己的mainloop()的情况下工作。但是通常(没有IDLE)需要使用mainloop()。最好检查terminal/console/cmd.exe中的代码以查看是否提供任何错误。