Python Tkinter输入框无法接受输入。

3
我在Tkinter输入框中遇到了一个非常奇怪的问题。当我尝试输入内容时,它们不接受我的输入。
经过一些电脑重启和Python重新安装,我找出了这种情况发生的原因:我在代码中的root.mainloop()之前放置了一个消息框。代码大致如下:
def xyz():
    if not messagebox.askyesno("Title","Some text"):
        exit()
xyz()
root.mainloop()

我发现,为了解决这个问题,你只需手动将焦点移到另一个窗口上,然后再切回来即可。但我想知道是否有更好的方法?我希望保留我的消息框,而不想采用手动更改窗口焦点这种不优雅的解决方案。

Python并不具备任何魔力,也不知道你想要切换哪个窗口,所以你必须自己编写代码(无论是否优雅),即使用focus_set()来聚焦到需要的窗口。 - user4171906
我认为这是一个已知的 bug。我猜你在使用 Windows,因为我认为这是唯一一个拥有此 bug 的平台。如果您使用 root.after_idle(xyz) 而不是直接调用 xyz(),会怎样呢?这将使 mainloop 有机会启动,但仍然在 GUI 启动时立即显示消息框。 - Bryan Oakley
@BryanOakley 谢谢,你的解决方案完美地解决了问题!我以前不知道 after_idle() - Sebastian Hietsch
@CurlyJoe 谢谢您的回复!我在帖子中没有提到的是,root 窗口会自动聚焦,但输入小部件无法正常工作。 - Sebastian Hietsch
1个回答

1
你可以像这样修复代码:

def xyz():
    if not messagebox.askyesno("Title","Some text"):
        exit()
root.after(10,xyz) #show the messagebox after root.mainloop()
root.mainloop()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接