2015-10-24 2 views
1

У меня есть код (как показано ниже), который предлагает пользователю выбрать, какой цвет изменить для графического интерфейса. Но моя проблема в том, что он меняет только фон. Я хотел бы знать, есть ли способ изменить фон каждой метки и кнопки сразу или мне нужно изменить каждую метку/кнопку отдельно.Как изменить цвет всего в графическом интерфейсе tkinter сразу

import tkinter 
window = tkinter.Tk() 
colour_frame = tkinter.Frame(window) 
options_frame = tkinter.Frame(window) 

def colours(): 
    options_frame.pack_forget() 
    red.pack() 
    orange.pack() 
    back_button.pack() 
    colour_frame.pack() 

def back(): 
    options_frame.pack() 
    colour_frame.pack_forget() 

def make_red(): 
    window.configure(background="red") 

def make_orange(): 
    window.configure(background="orange") 

colour_button = tkinter.Button(options_frame, text="Appearance", command=colours) 

red = tkinter.Button(colour_frame, text="RED", command=make_red) 
red.configure(bg = "red") 
orange = tkinter.Button(colour_frame, text="ORANGE", command=make_orange) 
orange.configure(bg = "orange") 
back_button = tkinter.Button(colour_frame, text="Back", command=back) 

window.mainloop() 

ответ

3

Вы можете создать список, содержащий все виджеты, которые вы хотите изменить

myWidgets = [button1, label1, ... ] # List of widgets to change colour 
for wid in myWidgets: 
    wid.configure(bg = newColour) 

Вот пример кода изменения цвета фона нескольких этикеток одновременно.

import tkinter as tk 


# Change all label backgrounds 
def change_colour(): 
    c = user.get() #Get the entered text of the Entry widget 
    for wid in widget_list: 
     wid.configure(bg = c) 

# Create GUI 
root = tk.Tk() 

tk.Label(root, text='Enter a colour').pack() 

user = tk.Entry(root) 
user.pack() 

label_frame = tk.Frame(root) 
label_frame.pack() 

btn = tk.Button(root, text='Change Colour', command = change_colour) 
btn.pack() 

widget_list = [user, btn] # Add defined widgets to list 

#Dynamicly create labels for example 
for x in range(10): 
    lbl = tk.Label(label_frame, text='Label '+str(x)) 
    lbl.pack(side = tk.LEFT) 
    widget_list.append(lbl) #Add widget object to list 

root.mainloop() 

Если у вас есть Рамка, уже содержащая все виджеты, которые вы хотите изменить, вы можете использовать это вместо этого.

parent_widget.winfo_children() возвращает список, содержащий все виджеты, хранящиеся внутри родительского виджета

def change_colour(): 
    c = user.get() 
    for wid in label_frame.winfo_children(): 
     wid.configure(bg = c) 
1

Вы должны изменить каждый виджет отдельно.

0

Попробуйте использовать ttk для некоторых элементов вашего GUI. ttk позволяет создавать стили для виджетов и обновлять стиль для всех виджетов сразу (по крайней мере для тех, которые имеют один и тот же стиль). Возможно, вам придется смешивать использование ttk и tkinter, но в конечном итоге это должно сделать вещи немного проще. Вот пример, который я сделал:

import tkinter as tk 
from tkinter import ttk 

root = tk.Tk() 

# Creating a style for the buttons 
color_style_button = ttk.Style() 
color_style_button.configure("color.TButton", foreground="red") 

def change_color(color): 
    # This function changes the style to all buttons using the "color.Button style" 

    if color == "red": 
     color_style_button.configure("color.TButton", foreground="red") 
    elif color == "blue": 
     color_style_button.configure("color.TButton", foreground="blue") 
    elif color == "green": 
     color_style_button.configure("color.TButton", foreground="green") 

frame_a = ttk.Frame(root) 
frame_a.pack() 

red_button = ttk.Button(frame_a, text="Red", command=lambda: change_color("red"), style="color.TButton") 
red_button.pack() 

blue_button = ttk.Button(frame_a, text="Blue", command=lambda: change_color("blue"), style="color.TButton") 
blue_button.pack() 

green_button = ttk.Button(frame_a, text="Blue", command=lambda: change_color("green"), style="color.TButton") 
green_button.pack() 

root.mainloop() 

Я рекомендую проверить this site, чтобы узнать больше о TTK и стилей.

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