python 仅当窗口尚未在Tkinter中打开时才打开窗口

h43kikqp  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(181)

我在tkinter中创建了一个按钮,它的命令是创建一个新窗口,但我不希望每次单击创建新窗口按钮时都创建一个新窗口,我希望告诉程序只有在新窗口尚未打开时才打开它。如果在后台的某个地方窗口已经打开,用户按下创建一个新窗口按钮,我希望它移动该窗口的第一用户屏幕的层(使其位于所有其他打开窗口的最前面)。
这是我的代码--

def main():
    main_bg = "Gray"
    main_fg = "White"
    
    import tkinter as tk

    employees = []
    

    window = tk.Tk()

    window.configure(bg=main_bg)
    window.title("Business app")
    window.geometry("1100x650")

    def open_new_window():
        random_window = tk.Toplevel(window)

        random_window.configure(bg=main_bg)
        random_window.geometry("600x600")

    random_button = tk.Button(window, text="Do Something", font="Times 32", bg=main_bg, fg=main_fg, command=open_new_window)
    random_button.pack()



    window.mainloop()




if __name__ == "__main__":
    main()

我已经搜索了像Geeksforgeeks和这个网站的网站,但我找不到我正在寻找的解决方案。请帮助。
注意--请不要关闭此问题并将我指向另一个论坛,因为如上所述,我已在此网站中检查了其他论坛

qvtsj1bj

qvtsj1bj1#

添加的grab_set()将防止再次打开新窗口。

def open_new_window():
    random_window = tk.Toplevel(window)
     
    #random_window.configure(bg=main_bg)
    random_window.geometry("600x600")
    random_window.grab_set()

结果:

当您点击Do Something时将阻止打开新窗口。除非关闭topelevel窗口,然后再次打开新窗口

vuv7lop3

vuv7lop32#

你可以保存一个对小部件的引用,然后检查引用是否被设置,如果被设置,你可以调用winfo_exists来检查引用是否指向一个现有的窗口。

random_window = None
...
def open_new_window():
    global random_window
    if random_window and random_window.winfo_exists():
        # the window exists, so do nothing
        return

    random_window = tk.Toplevel(window)

    random_window.configure(bg=main_bg)
    random_window.geometry("600x600")

相关问题