我正在尝试将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/