在Python Tkinter中将类用作框架
我目前正在编写一个越来越长的Python Tkinter代码。我想对GUI中的一些框架使用多个类来实现 下面的代码是我正在尝试做的一个示例。基本上制作一个有框架的类,框架使用另一个类作为父类 但是当我运行代码时,我得到了这个错误“'MainProgram'对象没有属性'FirstFrame'” 有什么解决办法吗?我试着搜索,但没有找到像这样的东西在Python Tkinter中将类用作框架,python,class,tkinter,Python,Class,Tkinter,我目前正在编写一个越来越长的Python Tkinter代码。我想对GUI中的一些框架使用多个类来实现 下面的代码是我正在尝试做的一个示例。基本上制作一个有框架的类,框架使用另一个类作为父类 但是当我运行代码时,我得到了这个错误“'MainProgram'对象没有属性'FirstFrame'” 有什么解决办法吗?我试着搜索,但没有找到像这样的东西 import tkinter as tk from tkinter import ttk class MainProgram(): def
import tkinter as tk
from tkinter import ttk
class MainProgram():
def __init__(self):
self.mainwin = tk.Tk()
self.FirstFrame()
class FirstFrame():
def __init__(self):
self.firstframe = ttk.LabelFrame(self.MainProgram.mainwin, text="hi")
self.firstframe.grid(column=0, row=0)
if __name__ == "__main__":
main = MainProgram()
main.mainwin.mainloop
替换:
self.Firstframe()
与:
-
Firstframe()
不是Mainprogram
查看此处的链接,了解将代码组织到类中的良好起点
该示例可以“按原样”用于组织策略,也可以作为一个很好的模板,一次修改一个条目,并了解其他可能的结构,其中一个类可以用于创建另一个类的实例
import tkinter as tk
from tkinter import ttk
class MainProgram():
def __init__(self):
self.mainwin = tk.Tk()
self.my_frame = FirstFrame()
# examine the child parent relationship
for child in self.mainwin.winfo_children():
print(child['text'])
class FirstFrame():
def __init__(self):
self.firstframe = ttk.LabelFrame(text="hi")
self.firstframe.grid(column=0, row=0)
ttk.Label(master=self.firstframe,text='a widget inside frame').grid()
if __name__ == "__main__":
main = MainProgram()
main.mainwin.mainloop
FirstFrame不是类MainProgram的方法,这就是为什么会出现此错误。可能是重复的,谢谢!如果我想使第二类中的帧成为mainwin的子帧,我会得到一个错误。我怎样才能解决这个问题?这是错误:“类型对象‘MainProgram’没有属性‘mainwin’”。可以使用.winfo_children()方法检查小部件的父子关系。上面的示例显示MainProgram中的框架有一个子项text=hi。这似乎是你的目标。这是一个使原始代码正常工作所需更改的示例。如果我想让FirstFrame.FirstFrame成为MainProgram.win的子级,我就是无法让它正常工作。在您提供的代码中,也没有安排它们来显示这是如何工作的。你能帮忙吗?
import tkinter as tk
from tkinter import ttk
class MainProgram():
def __init__(self):
self.mainwin = tk.Tk()
self.my_frame = FirstFrame()
# examine the child parent relationship
for child in self.mainwin.winfo_children():
print(child['text'])
class FirstFrame():
def __init__(self):
self.firstframe = ttk.LabelFrame(text="hi")
self.firstframe.grid(column=0, row=0)
ttk.Label(master=self.firstframe,text='a widget inside frame').grid()
if __name__ == "__main__":
main = MainProgram()
main.mainwin.mainloop