如何在Tkinter窗口上使用for循环创建多个框架?

时间:2020-06-29 11:22:45

标签: python class oop object tkinter

注意,我尝试使用正确的格式将其放入堆栈溢出,但是即使按了代码格式化按钮,它也无法处理响应。有人可以帮我吗?我在这里发布时没有格式设置,因为我需要很快的帮助。我知道这个论坛上的很多人都非常擅长编程,因此我想伸出援手。

我正在使用python开发应用程序,更具体地说,我正在将Tkinter用于用户界面。我需要在应用程序中创建二十多个新页面,因此,我想到了使用for循环和Outline类结构,以创建新实例(作为它们自己的页面,稍后将它们链接到周围)使用按钮的应用程序)作为我使用的类。但是,运行代码时,我继续收到以下错误:

File "setup.py", line 215, in <module>
pages_dict[info_req[info][filetype][0]] = outline_info(new_object)
TypeError: __init__() takes exactly 4 arguments (2 given)

我理解为什么这样做是有道理的,因为init函数定义包含4个参数,但是我不确定如何使控制器(在初始应用程序类中定义)和父窗口部分成为参数Outline_info类的实例,因为在这些情况下我无法引用self,因为直到声明点之前,这些类都还没有被声明或组成(如果这种解释似乎令人困惑,请查看下面的代码以获取相关信息)以及进一步的澄清。)

下面显示了我的代码节选,以解决上述问题。如果需要更多信息以了解或澄清我的问题,请告诉我。下面的代码不包含我定义的其他许多类,也没有包含名为info_req的数组,其中包含信息数据库。

class Application(tk.Tk):
        def __init__(self, *args, **kwargs):
            tk.Tk.__init__(self, *args, **kwargs)
    
            # the container is where we'll stack a bunch of frames
            # on top of each other, then the one we want visible
            # will be raised above the others
            container = tk.Frame(self)
            container.pack(side="top", fill="both", expand=True)
            container.grid_rowconfigure(0, weight=1)
            container.grid_columnconfigure(0, weight=1)
    
    
            self.frames = {}
            for F in (PageOne, PageThree, PageFour, indpage, familypage, FinalPage):
                page_name = F.__name__
                frame = F(parent=container, controller=self)
                self.frames[page_name] = frame
    
                # put all of the pages in the same location;
                # the one on the top of the stacking order
                # will be the one that is visible.
                frame.grid(row=0, column=0, sticky="nsew")
    
            self.show_frame("PageOne")
    
        def show_frame(self, page_name):
            '''Show a frame for the given page name'''
            frame = self.frames[page_name]
            frame.tkraise()
    
    class outline_info(tk.Frame):
    
        def __init__(self, parent, controller, info_type_array):
            
            count = 0 # Just for reference
            tk.Frame.__init__(self, parent)
            self.controller
            first_title = Label(self, text=info_type_array[0]).grid(row=1,column=1)
            for i in range(1, len(info_type_array)):
                text_first = Label(self, text=str(info_type_array[i])).grid(row=d+1, column=1)
                entry_first = Entry(self, width=20).grid(row=d+1, column=2)
                count += 1
            def submit_again():
                controller.show_frame("indpage")
                return "hello" # Do I still need this?
            submit2 = Button(self, text="Submit Details", bg="blue", command=submit_again)
            submit2.pack(side=BOTTOM)
    pages_dict = {}
    for i in range(0, len(info_req)):
        for filetype in range(0, len(info_req[i])):
            if filetype!=0:
                new_object = info_req[i][filetype]
                if info_req[i][filetype][0] not in pages_dict.keys():
                    pages_dict[info_req[i][filetype][0]] =outline_info(new_object)

非常感谢。

编辑:

以下是info_req的代码段。我正在创建一个初学者的旅行指南,但是我真的很想在原始帖子中学习如何解决该问题。

info_req = [[[“访问的地方”],[“国家1”,“访问的城市”,“建议”],[“国家2”,“访问的城市”,“建议”]],[[“ “最喜欢的食物”],[“食物1”,“美食”,“口味”,“风味”,[“食物2”,“美食”,“味道”,“风味”]],[[“最喜欢的航空公司” ],[“航空公司1”,“组织”,“位置”,“持续时间”]]]

0 个答案:

没有答案