Tkinter GUI无需重复代码

时间:2017-01-10 09:19:11

标签: python loops user-interface optimization tkinter

在我的计划的最后润色中苦苦挣扎了一段时间。我想有人可能会帮忙。

基本上,我的程序包括使用4个按钮向用户询问它想要显示有关信息的4家公司。

class CompanyAnalysis(tk.Frame):

    def displayfunction(controller, j):
        return lambda: controller.show_frame(j)

    company_choice = ["AnalysisCompany1", "AnalysisCompany2", "AnalysisCompany3", "AnalysisCompany4"]
    company_name = ["Company1", "Company2", "Company3", "Company4"]

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller

        header = tk.Label(self, text="Which company to analyze?")
        header.pack(side="top", padx=2, pady=2, fill="x")

        for i,j in zip(company_name, company_choice):
            button = tk.Button(self, text=i, command=displayfunction(controller,j))
            knapp.pack(side="top", padx=2, pady=2, fill="x")

这基本上是我公司选择的课程。但是,我的GUI按照它的方式构建,我目前有4个IDENTICAL类用于显示公司信息的框架。他们看起来如下:

class FAnalysEricsson(tk.Frame):


def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    self.controller = controller

    text = tk.Message(self, text=companylist[0].fundamental())
    text.pack(side="top", padx=2, pady=2, fill="x")

如果companylist是一个对象列表,我将其称为基本方法,返回有关公司的信息。如何在不重复每个公司的代码的情况下设计GUI?我想的可能是一个顶层窗口,就像某种功能(而不是显示功能),当我按下按钮时会打开一个新窗口,显示正确公司的信息(公司列表的索引)。

请不要犹豫要求我澄清任何内容,如果不发布我的全部代码,很难解释。

1 个答案:

答案 0 :(得分:1)

只创建一个类,将索引传递给companylist__init__方法。

class FAnalys(tk.Frame):
    def __init__(self, parent, controller, cmp_index):
        tk.Frame.__init__(self, parent)
        self.controller = controller

        text = tk.Message(self, text=companylist[cmp_index].fundamental())
        text.pack(side="top", padx=2, pady=2, fill="x")