2017-01-10 7 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 ИДЕНТИЧНЫХ класса для фреймов, отображающих информацию о компании. Они выглядят следующим образом:

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") 

Где компания является списком объектов, где я называю метод фундаментальным, который возвращает информацию о компании. Как мне создать графический интерфейс без повторения кода для каждой компании? Я подумал, может быть, окно верхнего уровня, вроде какой-то функции (вместо функции display), которая, когда я нажимаю кнопку, открывает новое окно, отображающее информацию для правильной компании (индекс списка компаний).

Пожалуйста, не стесняйтесь просить меня прояснить все, что трудно объяснить, не публикуя весь текст моего кода.

ответ

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")