2017-01-10 35 views
-1

在我的程序完成後,一直在掙扎。我想有人可能會幫忙。沒有重複代碼的Tkinter GUI

基本上,我的程序要求用戶使用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

只創建一個類,將索引傳遞給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")