【问题标题】:Go back and forth between tkinter windows在 tkinter 窗口之间来回切换
【发布时间】:2020-01-03 10:17:24
【问题描述】:

我目前正在努力创建一个包含多个 Windows 的 tkinter 项目。我想要的只是通过我的程序定期前进并逐步倒退。经过大量研究,我正在努力寻找一个解释如何做到这一点的示例。

我尝试在几篇帖子之后创建一个最小的示例,但它还没有工作,老实说,我真的不明白我在做什么。

我最大的参考是这里的这篇文章,但它很长而且很复杂: tkinter - Going Back and Forth Between Frames Using Buttons

另一方面,这里的这个例子对我来说还不够。结合和解释可能已经成功了: Tkinter open and close Toplevel windows

  • 您能帮我创建一个最小的示例(有或没有实际窗口的代码)吗?
  • 并解释发生了什么。我认为这很简单,所以我猜解释可能相当短。 (如果你知道一个解释得很好的教程网站,我也会很高兴)

提前致谢,希望我们能为我和其他人创建有用的资源。

 def Forward(self):    
        # Open secondary Window
        Secondary_Win = Toplevel()  
        #Close primary Window
        Main_Win.withdraw() #.deiconify() to show again
        Main_Win.destroy()

 def Backward(self):    
        # Close secondary Window
        Secondary_Win.withdraw 
        #Open primary Window
        Main_Win.deiconify()

编辑:正如@stovfl 指出的那样澄清:我想在实际的 Windows 之间切换,而不仅仅是框架。抱歉措辞打嗝。

【问题讨论】:

  • 您必须明确是要在一个窗口内切换tk.Frames,通常是主窗口,还是在多个tk.Toplevel窗口之间切换。跨度>

标签: python tkinter


【解决方案1】:

也许这有点接近您正在寻找的内容:

from tkinter import *


root = Tk()



class temp_frame:

    def __init__(self, master):
        self.master = master
        self.secondary_win = None
        self.btn_next = Button(self.master, text="Forward", command=self.Forward)
        self.btn_next.pack()


    def Forward(self):    
        # Open secondary Window
        if not self.secondary_win:
            self.secondary_win = Toplevel()
            back_btn = Button(self.secondary_win, text="Back", command=self.Backward)
            back_btn.pack()
            self.master.withdraw()
        else:
            self.secondary_win.deiconify()
            self.master.withdraw()



    def Backward(self):    
        self.secondary_win.withdraw()
        self.master.deiconify()


temp = temp_frame(root)

root.mainloop()

解释:

temp_frame 类的帮助下创建了一个框架。框架具有向后和向前的功能,当按下向前时打开一个新窗口,当按下向后时撤回新窗口。当新窗口被撤回时,主窗口被前移。

编辑:修改代码以避免每次按下“前进”时都创建一个新窗口。

【讨论】:

  • 对我来说似乎非常完美,谢谢。 def __init__ 命名方案只是我认为的常见做法?
  • 谢谢,是的,没错:def init是类的构造函数,用于初始化类变量。
  • 谢谢,这是一个好点!我现在已经更新了我的答案,请查看我的编辑。
  • @temp123:好的,一个迂腐的观点:这个if not self.secondary_win:应该是if self.secondary_win is None:
猜你喜欢
  • 2016-06-07
  • 2020-12-02
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多