繁体   English   中英

tkinter simpledialog 将焦点放在提交时调用的窗口的父级

[英]tkinter simpledialog giving focus to parent of window it was called from when submitted

我试图从 window1 打开 window2 并要求在两者之间输入一个字符串。 在成功(或不成功)输入时,window1 似乎将焦点从 window2 收回。 即使在关闭对话后在 window2 上调用 focus_set。

如果省略了 askstring,则 window2 将专注于创建

import os
import tkinter as tk
from tkinter import ttk
from tkinter import simpledialog

class window2:
    def __init__(self,root):
        self.root = root
        self.root.withdraw()
        simpledialog.askstring("askstring","askstring")
        self.root.deiconify()

class window1:
    def __init__(self,root):
        self.root = root
        self.button = tk.Button(self.root,text = "Test", command = self.newwindow)
        self.button.grid()
    
    def newwindow(self):
        newin = window2(tk.Toplevel(self.root))

if __name__ == "__main__":
    toproot = tk.Tk()
    win = window1(toproot)
    win.root.mainloop()

我想知道这样做是因为我设置类的方式还是简单的简单对话会触发这种效果。

在注意到我的简化代码丢失了withdraw()deiconify()我想一旦窗口再次可见,我就可以将窗口放回前面。


import tkinter as tk
from tkinter import ttk
from tkinter import simpledialog

class window2:
    def __init__(self,root:tk.Tk):
        self.root = root
        self.root.withdraw()
        simpledialog.askstring("this","sucks",parent = self.root)
        self.root.deiconify()
        self.root.wait_visibility()
        self.root.lift()
class window1:
    def __init__(self,root):
        self.root = root
        self.button = tk.Button(self.root,text = "Test", command = self.newwindow)
        self.button.grid()
    
    def newwindow(self):
        newin = window2(tk.Toplevel(self.root))

if __name__ == "__main__":
    toproot = tk.Tk()
    win = window1(toproot)
    win.root.mainloop()

不完全优雅,但它有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM