我正在尝试将Python 3中的消息框与Tkinter一起使用,以为用户索取名称。下面的精简代码会产生这样的消息框,并在关闭时正确传递值,但是该消息框会在主窗口后面弹出。如果我将消息框移出,输入一些内容作为名称,然后单击“确定”,则主窗口将更新,但隐藏在所有其他打开的窗口后面。

一位 friend 试图在Mac上复制该问题,但是代码的行为符合预期。

如何使消息框以焦点开头显示在顶部,并且在关闭消息框后如何正确将焦点移到主窗口?

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import tkinter
import tkinter.simpledialog

root = tkinter.Tk()
playerNameVar = tkinter.StringVar()
playerNameVar.set(tkinter.simpledialog.askstring("Name", \
    "Name?",parent=root))

playerLabel = tkinter.Label(root,textvariable = playerNameVar)
playerLabel.grid()

root.mainloop()

最佳答案



我不认为您可以使消息框显示在焦点上方而无需将tkinter展开为其Tcl,但是您可以在显示对话框之前轻松地将root变为lower本身:

root.lower()

您可以在调用对话框行的行之后简单地调用focus_set。请参见以下代码以获取完整示例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import tkinter
import tkinter.simpledialog

root = tkinter.Tk()

root.lower()
playerNameVar = tkinter.StringVar()
playerNameVar.set(tkinter.simpledialog.askstring("Name", \
    "Name?",parent=root))
root.focus_set()
#root.tkraise()                 # this is optional

playerLabel = tkinter.Label(root,textvariable = playerNameVar)
playerLabel.grid()

root.mainloop()

关于python - 如何在Windows中的python 3中的消息框中正确传递焦点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48352645/

10-12 20:59