在 tkinter 中清除帧
Clearing frames in tkinter
在没有任何正规培训和对 Python 3.3 非常基本的了解的情况下,我正在努力理解 tkinter 以制作基本的 gui。我已经阅读了这个方法:
这让我难以理解。我从复制和粘贴代码中学得不是很好。我的问题是:
如果我想制作一个具有多个 windows 的图形用户界面,我通过简单地破坏一个框架并在使用 class 时用另一个框架替换它来实现,我想我只是不明白为什么这么难。我今天玩了一会儿,我不明白为什么下面的代码不起作用。我无法绕过的是为什么它能正确地翻转到新的window,但不能return到主window。两者按钮针对各自的用途进行了相同的编码,但一个有效,一个无效。
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()
我知道我可以按照前面提到的 link 来获得想要的结果,但我只是不明白为什么像这样的东西,或者其他对新手来说更简单的东西不能'达不到同样的效果。
问题是因为您对方法 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_frame
同样的问题是 new_frame(self, ...)
和 self.new_frame = Frame(...)
(ps。我在代码中添加空行以使其更具可读性)
from tkinter import *
class Application:
def __init__(self, master):
self.master = master
self.new_switch_on = False
self.main_switch_on = False
self.create_main_frame()
def create_main_frame(self): # new name
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.create_new_frame).pack() # new name
self.main_frame.pack()
def create_new_frame(self): # new name
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.create_main_frame).pack() # new name
self.new_frame.pack()
root = Tk()
root.geometry('-1+1')
app = Application(root)
root.mainloop()
在没有任何正规培训和对 Python 3.3 非常基本的了解的情况下,我正在努力理解 tkinter 以制作基本的 gui。我已经阅读了这个方法:
这让我难以理解。我从复制和粘贴代码中学得不是很好。我的问题是:
如果我想制作一个具有多个 windows 的图形用户界面,我通过简单地破坏一个框架并在使用 class 时用另一个框架替换它来实现,我想我只是不明白为什么这么难。我今天玩了一会儿,我不明白为什么下面的代码不起作用。我无法绕过的是为什么它能正确地翻转到新的window,但不能return到主window。两者按钮针对各自的用途进行了相同的编码,但一个有效,一个无效。
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()
我知道我可以按照前面提到的 link 来获得想要的结果,但我只是不明白为什么像这样的东西,或者其他对新手来说更简单的东西不能'达不到同样的效果。
问题是因为您对方法 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_frame
同样的问题是 new_frame(self, ...)
和 self.new_frame = Frame(...)
(ps。我在代码中添加空行以使其更具可读性)
from tkinter import *
class Application:
def __init__(self, master):
self.master = master
self.new_switch_on = False
self.main_switch_on = False
self.create_main_frame()
def create_main_frame(self): # new name
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.create_new_frame).pack() # new name
self.main_frame.pack()
def create_new_frame(self): # new name
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.create_main_frame).pack() # new name
self.new_frame.pack()
root = Tk()
root.geometry('-1+1')
app = Application(root)
root.mainloop()