0

我试图从 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()

我想知道它是否这样做是因为我设置类的方式,或者仅仅是因为它的一些 simpledialogue 触发了这种效果。

4

1 回答 1

0

在注意到我的简化代码丢失之后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()

不完全优雅,但它有效。

于 2021-10-15T20:11:22.613 回答