【问题标题】:Tkinter using pythonTkinter 使用 python
【发布时间】:2020-12-12 22:56:26
【问题描述】:

如果我在 tkinter 中有一个主窗口,那么我单击一个按钮,它会打开另一个窗口(辅助窗口)并最小化第一个窗口,然后我决定单击第二个窗口上的一个按钮以返回第一个窗口窗口(如“返回按钮”)我如何通过在 tkinter 中按下第二个窗口上的按钮来执行返回第一个窗口的选项?谢谢!

import tkinter as tk

def funcion():
    otra_ventana = tk.Toplevel(root)
    root.iconify()

def funcion2():
    vuelta_ventana.iconify()
    root.deiconify() 

root = tk.Tk()
boton = tk.Button(root, text="Abrir otra ventana", command=funcion)
boton2 = tk.Button(root, text="return", command=funcion2)
boton.pack()
root.mainloop()

【问题讨论】:

    标签: tkinter


    【解决方案1】:

    几乎相同,就像您对第一个函数“funcion”所做的那样。 但是,您必须在 tk.Toplevel 中打包调用 funcion2 的按钮。

    从长远来看,一旦您的应用变大,将您的 Windows / Frames 分组到类中会对您有所帮助。

    import tkinter as tk
    
    def main():
        app = App()
        app.mainloop()
    
    class App(tk.Tk):
        def __init__(self):
            super().__init__()
            self.geometry("300x300")
            self.popup = None
    
            self.buton = tk.Button(
                self,
                text="Abrir otra ventana",
                command=self.funcion
            )
            self.buton.pack()
    
    
        def funcion(self):
            self.iconify()
            if self.popup is None:
                self.popup = MyToplevel(self)
            else:
                self.popup.deiconify()
    
    
    class MyToplevel(tk.Toplevel):
        def __init__(self, master):
            super().__init__()
            self.master = master
    
            self.buton = tk.Button(
                self,
                text="Return",
                command=self.funcion2
            )
            self.buton.pack()
    
        def funcion2(self):
            print("hello")
            self.master.deiconify()
            #self.destroy()#maybe more useful? 
            self.iconify()
    
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      【解决方案2】:

      除了@caskuda 的答案,您直接更正的代码将是

      import tkinter as tk
      
      def funcion():
          global otra_ventana
          otra_ventana = tk.Toplevel(root)
          return_button=tk.Button(otra_ventana,text='Return',command=funcion2).pack()
          root.iconify()
      
      def funcion2():
          otra_ventana.iconify()
          root.deiconify() 
      
      root = tk.Tk()
      boton = tk.Button(root, text="Abrir otra ventana", command=funcion)
      boton.pack()
      root.mainloop()
      

      如果您的目标只是切换窗口,您也可以尝试这种方法

      import tkinter as tk
      
      def switch(target,window):
          target.iconify()
          window.deiconify()
      
      root=tk.Tk()
      button=tk.Button(root,text="Abrir otra ventana",command=lambda:switch(root,otra_ventana)).pack()
      otra_ventana=tk.Toplevel(root)
      return_button=tk.Button(otra_ventana,text='Return',command=lambda:switch(otra_ventana,root)).pack()
      otra_ventana.withdraw()
      root.mainloop()
      

      在这里,我在开始时初始化了两个窗口,然后使用.withdraw() 方法隐藏/从可见性中删除第二个窗口。使用lambda 函数可以让我们在需要时调用所需的函数以及参数。 switch()函数有2个参数,前者是要图标化的窗口,后者是要去图标化的窗口。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-24
        • 2015-11-27
        • 2017-12-08
        • 2016-09-02
        • 1970-01-01
        相关资源
        最近更新 更多