2017-01-10 6 views
-1

私のプログラムの仕上げをしばらく苦労しています。私は誰かを助けることができるかもしれないと考えました。TkinterのGUIに繰り返しのコードがない場合

基本的に私のプログラムは、4つのうち4つの企業のうち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を設計するにはどうすればよいですか?私はボタンを押すと正しい会社の情報を表示する新しいウィンドウ(companylistのインデックス)を開く何らかの機能(ディスプレイ機能の代わりに)のようなトップレベルのウィンドウを考えていた。

私のコード全体を投稿することなく何かを説明するのは難しいですが、何かを明確にすることを躊躇しないでください。

答えて

1

クラスを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") 
関連する問題