Здравствуйте, я думаю, что у меня есть проблема с дизайном 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()
Текущее поведение для зависимых раскрывающихся списков (код ниже):

Второй список не перекрывается, если я добавлю 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')
:
