tk 之后无法输入

2024-01-12

如果有这段代码:

import Tkinter as tk
import tkFileDialog

menu = tk.Tk()
res = tkFileDialog.askopenfilename() # un-/comment this line
label = tk.Label(None, text="abc")
label.grid(row=0, column=0, sticky=tk.W)
entry = tk.Entry(None)
entry.grid(row=0, column=1, sticky=tk.EW)

res = menu.mainloop()

注:askopenfilename只是一个虚拟输入。因此,只需关闭它即可进入 TK(现已被阻止)的主窗口。

当我评论的时候askopenfilename一切正常。但有了它,我无法在条目中输入数据。

这只发生在 Windoze 环境中。这askopenfilename似乎抢走了 TK 主窗口的焦点。单击完全不同的窗口并再次返回 TK 窗口后,即可进行输入。


我以前看过有关此问题的报告,我认为这是 Windows 上的一个已知错误。在打开对话框之前,您需要让主循环启动。

如果您希望在应用程序首次启动时显示对话框,您可以使用after or after_idle让它运行mainloop启动。

例如:

menu = tk.Tk()
...
def on_startup():
    res = tkFileDialog.askopenfilename()

menu.after_idle(on_startup)
menu.mainloop()

如果您不想在对话框之后执行任何其他 GUI 代码,请移动除创建根窗口之外的所有代码并调用mainloop into on_startup或其他一些功能。

例如:

def main(filename):
    label = tk.Label(None, text="abc")
    label.grid(row=0, column=0, sticky=tk.W)
    entry = tk.Entry(None)
    entry.grid(row=0, column=1, sticky=tk.EW)

def on_startup():
    res = tkFileDialog.askopenfilename()
    main(filename)

root = Tk()
root.after_idle(on_startup)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tk 之后无法输入 的相关文章

随机推荐