Python: изменение конфигурации дочерних элементов виджета дублирует виджет в tkinter - PullRequest
0 голосов
/ 12 октября 2018

Здравствуйте, я думаю, что у меня есть проблема с дизайном Python tkinter.Я посмотрел на этот , чтобы лучше структурировать мой код.Я не хочу менять конфигурацию всех моих виджетов по отдельности и хотел бы использовать команду parent_widget.winfo_children(), которую я нашел из этого вопроса.

Мне интересно, есть ли лучший способиндивидуально не настраивать виджеты и обновлять их шрифт и стиль.

Вот мой код и текущее поведение:

class TabOne(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.tab1_note = ttk.Notebook(self,width=parent.winfo_screenwidth(), height=parent.winfo_screenheight())

        tab1_open_observations = ttk.Frame(self.tab1_note)
        tab1_closed_observations = ttk.Frame(self.tab1_note)

        self.tab1_note.add(tab1_open_observations, text= "Open Projects")
        self.tab1_note.add(tab1_closed_observations, text= "Closed/Deferred Projects")
        self.tab1_note.pack()

        self.tab_two_load(tab1_open_observations)
        self.tab_three_load(tab1_closed_observations)
        widget_list = []
        widget_list.extend(tab1_open_observations.winfo_children())
        widget_list.extend(tab1_closed_observations.winfo_children())

        for wid in widget_list:
            try:
                wid.configure(font = 'helvetica 12')
            except:
                pass

     def tab_one_load(self,tab1_refresh_db):
     def tab_two_load(self,tab1_open_observations)

class TabTwo(Frame):
class TabThree(Frame):

class MainWindow(Frame):
    def __init__(self, window, **kwargs):
        Frame.__init__(self, window, **kwargs)
        self.load_ui()

    def load_ui(self):
        self.note = ttk.Notebook(self,width=self.window.winfo_screenwidth()-(2*self.pad), height=self.window.winfo_screenheight()-(2*self.pad))

        self.tab1 = TabOne(self.note)
        self.tab2 = TabTwo(self.note)
        self.tab3 = TabThree(self.note)

        self.note.pack()

def main():
    window = Tk()
    window.title('Productivity Tool')
    app = MainWindow(window)
    app.pack(side="top", fill="both", expand=True)
    window.mainloop()

if __name__ == '__main__':
    main()

Текущее поведение для зависимых раскрывающихся списков (код ниже):

enter image description here

Второй список не перекрывается, если я добавлю project_module_dropdown.configure(font='helvetica 12') ниже каждого зависимого OptionsMenu, вот еще код для функции tab_two_load()

def tab_two_load(self,tab1_open_observations):

    def update_modules(a,b,c):

        proj_mo_names = [module[0] for module in project_modules]
        proj_mod_select.set(proj_mo_names[0])
        project_module_dropdown = OptionMenu(tab1_open_observations,proj_mod_select,*proj_mo_names)
        project_module_dropdown.configure(font='helvetica 12')
        project_module_dropdown.grid(row=2, column=1,padx=10, pady=10)

    proj_select = StringVar(tab1_open_observations,value='Default Text')
    proj_select.trace('w',update_modules)

    proj_mod_select = StringVar(tab1_open_observations,value='Default Text')
    proj_mod_select.trace('w',update_teams)
    proj_mod_select.trace('w',update_artifacts)

    proj_names = [project[1] for project in projects]
    proj_select.set(proj_names[0])
    project_dropdown = OptionMenu(tab1_open_observations,proj_select,*proj_names)
    project_dropdown.grid(row=1,column=1,padx=10,pady=10)

Я думаю, что проблема в том, как я структурировал свой код, но я верю, что хорошо разделил код, но я открыт для предложений.это не совсем проблема проверки кода.Моя проблема - перекрывающиеся дроадаы, но я чувствую, что в моем коде есть некоторое дублирование, которого я бы хотел избежать.Любая помощь это здорово.Спасибо.

Я хотел бы это как желаемое поведение без добавления project_module_dropdown.configure(font='helvetica 12'):

enter image description here

...