在Python Tkinter中使用类作为框架

时间:2018-04-08 20:41:29

标签: python class tkinter

我目前正在处理越来越长的Python Tkinter代码。我想为GUI中的一些帧使用多个类来实现。

下面的代码是我想要做的一个示例。基本上创建一个具有框架的类,并且框架使用另一个类作为父级。

但是当我运行代码时,我收到此错误"' MainProgram'对象没有属性' FirstFrame'"

任何解决方案?我尝试过搜索但是找不到这样的东西我没有成功。

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

2 个答案:

答案 0 :(得分:1)

替换:

self.Firstframe()

使用:

self.ff=Firstframe()

- Firstframe()不是Mainprogram的属性。

答案 1 :(得分:0)

请查看此处的链接,以便将代码组织打造成类

的良好起点

Switch between two frames in tkinter

该示例可以按原样使用'对于组织策略或作为一个非常好的模板来一次修改一个部分并了解其他可能的结构,其中一个类可用于创建另一个类的实例。

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