清除tkinter中的帧

时间:2016-01-26 23:25:52

标签: tkinter frame python-3.3

没有任何正式的培训和对Python 3.3的基本理解,我正在努力理解tkinter制作一个基本的gui。我已经阅读了这个方法:

Tkinter! Understanding how to switch frames

这是我的头脑。我没有从复制和粘贴代码中学到很多东西。我的问题是:

如果我想制作一个带有多个窗口的gui,我通过简单地破坏一个框架并在使用一个类时用另一个框架替换它来实现,我想我只是不明白为什么它如此难以实现。我今天玩了一会儿,我不明白为什么以下代码不起作用。我无法包裹我的面条的是为什么它会正确地翻转到新窗口,但无法返回到主窗口。两个按钮的编码方式完全相同,但是有一个按钮可以正常编码“T

from tkinter import *

class Application:
    def __init__(self, master):
        self.master = master
        self.new_switch_on = False
        self.main_switch_on = False
        self.main_frame()

    def main_frame(self):
        if self.new_switch_on == True:
            self.new_frame.destroy()
        self.new_switch_on = False
        self.main_switch_on = True
        self.main_frame = Frame(self.master, width = 200, height = 100)
        Label(self.main_frame, text = 'Main Frame').pack()
        Button(self.main_frame, text = 'Next', command = self.new_frame).pack()
        self.main_frame.pack()

    def new_frame(self):
        if self.main_switch_on == True:
            self.main_frame.destroy()
        self.main_switch_on = False
        self.new_switch_on = True
        self.new_frame = Frame(self.master, width = 400, height = 200)
        Label(self.new_frame, text = 'New Frame').pack()
        Button(self.new_frame, text = 'Back', command = self.main_frame).pack()
        self.new_frame.pack()

root = Tk()
root.geometry('-1+1')

app = Application(root)

root.mainloop()

我知道我可以按照前面提到的链接来获得所需的结果,但我只是不明白为什么这样的事情,或者对于新学习者而言更为简单化的其他事情无法实现相同的结果。

1 个答案:

答案 0 :(得分:1)

问题是因为您对方法/etc/hosts和框架main_frame(self, ...)使用相同的名称。

当您将框架分配给变量self.main_frame = Frame(...)时,您将失去对方法self.main_frame = Frame(...)的访问权限,而您的self.main_frame()无法调用方法Button(self.new_frame, text = 'Back', command=self.main_frame)

为方法self.main_frame使用不同的名称 - 例如main_frame

同样的问题出在create_main_framenew_frame(self, ...)

(ps。我添加代码空行以使其更具可读性)

self.new_frame = Frame(...)