tk 后无法输入



如果有这段代码:

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时,一切正常。但是有了它,我无法在条目中输入数据。

这只发生在温多兹环境中。askopenfilename似乎窃取了主TK窗口的焦点。单击完全不同的窗口并在TK窗口中再次单击后,可以输入。

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

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

例如:

menu = tk.Tk()
...
def on_startup():
    res = tkFileDialog.askopenfilename()
menu.after_idle(on_startup)
menu.mainloop()
如果不希望在

对话框之后执行任何其他 GUI 代码,请将除创建根窗口和调用 to mainloop之外的所有代码移动到 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)

>askopenfilename有自己的事件循环。程序将停止,直到您选择了文件名,然后继续。

相关内容

  • 没有找到相关文章

最新更新