如何解决在调用命令以创建新的Toplevel后,Tkinter OptionMenu重新聚焦于自身
我正在使用Tkinter OptionMenu创建一个顶级窗口。但是,我发现在创建窗口之后,如果我稍微移动光标,焦点就会回到我的主屏幕(左侧的小屏幕),而不是新创建的Toplevel。
如果我使用Button而不是OptionMenu来执行相同的操作,则新的Toplevel窗口将正确发送到前端。
以下是产生该错误的代码:
import tkinter as tk
class Application(tk.Frame):
def __init__(self,master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_button()
self.create_dropdown()
def create_button(self):
self.button = tk.Button(self)
self.button["text"] = "Create Toplevel"
# this works correctly,new topmost sent to the top
self.button["command"] = self.create_toplevel
self.button.pack(side="top")
def create_dropdown(self):
self.current_dropdown_option = tk.StringVar(self.master)
self.current_dropdown_option.set("Choose an option")
# this doesn't work correctly,the new Toplevel is sent to the back
self.dropdown = tk.OptionMenu(self.master,self.current_dropdown_option,"Option 1",command=self.create_toplevel_for_dropdown)
self.dropdown.pack(side="top")
def create_toplevel(self):
self.toplevel = tk.Toplevel(self.master)
self.toplevel.geometry("600x600")
def create_toplevel_for_dropdown(self,arg):
self.toplevel = tk.Toplevel(self.master)
self.toplevel.geometry("600x600")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
我尝试了https://stackoverflow.com/a/36191443/2860949的解决方案,但它不起作用。
在macOS Catalina 10.15.5和python.org上的python 3.7.6上进行了测试。
解决方法
无论您在创建Toplevel_name.focus_set()
的任何位置,都可以使用此Toplevel
方法。此方法适用于任何与此相关的小部件,它将键盘焦点移至特定的小部件,这意味着发送到应用程序的所有键盘事件都将路由到该小部件。
有关基本窗口小部件方法的完整列表,请参见https://effbot.org/tkinterbook/widget.htm。
希望能有所帮助, 干杯!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。