【问题标题】:Tkinter-Hide or quit and get back a windowTkinter-隐藏或退出并返回一个窗口
【发布时间】:2018-07-03 00:40:04
【问题描述】:

我正在尝试隐藏我的窗口并在它之前打开时将其显示回来。

为此,我使用了一个打开的全局变量,但这个变量的行为不像我想要的那样。

例如,当我从窗口返回并返回时,我的变量是 False,而不是我期望的 True。

我正在使用带有 Tkinter 的 Python 3.6 下面是代码。

如果有人可以向我解释为什么它会这样或者我做错了什么,你会很好。谢谢。

我知道this blog 正在展示一种方法,但我想了解为什么这种方法不起作用,谢谢。

from tkinter import * 

def quit_window():  
   window.destroy()
   opened = False
   Main()



def return_main():  
    window.withdraw()
    opened = True
    print(opened)
    Main()

def launch():
    global opened, window
    print(opened)
    if opened == True:
        window.update()
        window.deiconify()
        main.destroy()
    else:
        window = Tk() 
        breturn = Button(window, text="Return", command=return_main).pack()
        bquit = Button(window, text="Quit", command=quit_window).pack() 
        main.destroy()
        window.mainloop()



def Main():  
    global main
    print(opened)
    main = Tk()  
    bopen = Button(main, text="Open", command=launch).pack() 
    main.mainloop()

opened = False 
Main()  

【问题讨论】:

    标签: python tkinter hide show


    【解决方案1】:

    您忘记在quit_windowreturn_main 函数中添加global opened。因此,当您单击返回按钮时,您的全局变量 opened 不会更改,只会更改 return_main 函数内的本地变量。

    此外,我认为没有必要在每次显示window 时销毁main,因为您在两者之间来回切换。所以我的建议是保留main,并在不需要时简单地撤回它。在这种情况下,window 将是 Toplevelmain,代码是:

    from tkinter import * 
    
    def quit_window():  
       global opened
       window.destroy()
       opened = False
       main.deiconify()
    
    def return_main(): 
        global opened 
        window.withdraw()
        opened = True
        print(opened)
        main.deiconify()
    
    def launch():
        global opened, window
        print(opened)
        main.withdraw()  # withdraw main instead of destroying it
        if opened == True:
            window.deiconify()
        else:
            window = Toplevel(main) 
            breturn = Button(window, text="Return", command=return_main).pack()
            bquit = Button(window, text="Quit", command=quit_window).pack()   
    
    main = Tk()  
    bopen = Button(main, text="Open", command=launch).pack() 
    opened = False 
    main.mainloop()  # call mainloop only for main
    

    【讨论】:

    • 哦,谢谢,我想我只需要定义一次全局变量。
    猜你喜欢
    • 2018-05-29
    • 2018-01-10
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多