2015-02-15 2 views
1

Я пытаюсь создать меню настроек в своей программе, чтобы вы могли изменить фон для всех окон в программе. Но я не знаю, как это сделать, когда вы нажимаете кнопку, фон меняется. Любая помощь? Вот то, что я до сих пор, если это необходимо:Изменение фона нескольких окон в Tkinter

#Settings 
    class programSettings(tk.Frame): 

     #Initialize 
     def __init__(self, parent, controller): 
      tk.Frame.__init__(self, parent) 

      #Setups 
      title = ttk.Label(self, text = "Settings", font = LARGE_FONT) 

      colorButton = ttk.Button(self, text = "Background Color", command = lambda: controller.show_frame(color)) 
      menuButton = ttk.Button(self, text = "Main Menu", command = lambda: controller.show_frame(StartPage)) 

      #Placement 
      title.pack() 
      colorButton.pack() 
      menuButton.pack() 

    #Color 
    class color(tk.Frame): 

     #Initialize 
     def __init__(self, parent, controller): 
      tk.Frame.__init__(self, parent) 

      #Setups 
      blueButton = ttk.Button(self, text = "Blue", command = lambda: controller.show_frame(programSettings)) 
      blueButton.configure(bg = "#4285F4") 
      #Placement 
      blueButton.pack() 

Это не так много, и я попробовал несколько вещей, но они не работали.

+0

Вам нужна ссылка на все «окна», которые вы хотите изменить фон в текущем окне верхнего уровня. После этого вы можете просто вызвать метод 'config' и свойство' background' – nbro

+0

@ Rinzler. Как я могу ссылаться на все окна? Я изучаю Python, поэтому я не слишком много знаю. –

+0

Изучите первый Python, а затем перейдите к tkinter, иначе у вас будет больше проблем. – nbro

ответ

1

Существует два решения: сохраняйте ссылку на каждое окно и используйте метод configure для изменения фона или создания функции, которая воссоздает весь пользовательский интерфейс после изменения некоторых глобальных значений.

Вот грубый набросок того, как вы делаете первый метод:

class ControllerClass(object): 
    def __init__(self): 
     ... 
     self.windows = [] 
     ... 
    def show_frame(self, frame_class): 
     ... 
     the_frame = frame_class(root, self) 
     self.windows.append(the_frame) 
     ... 
    def change_color(self): 
     ... 
     for frame in self.windows: 
      frame.configure(background=the_color) 
     ... 

Конечно, она должна быть немного более сложным, чем это. Например, ваш контроллер может иметь словарь настроек, а не один цвет. Кроме того, вы можете подумать о том, что каждый объект окна несет ответственность за изменение его собственного цвета, поэтому вы можете сделать frame.set_color(the_color). Таким образом, каждое окно может не только устанавливать фон сам по себе, но и все связанные дочерние окна.

Смежные вопросы