Изменить цвет фона всех меток - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь сделать свое приложение написанным на python с помощью Tkinter GUI, чтобы оно менялось в зависимости от того, находится ли устройство в светлом или темном режиме. Кажется, я не могу изменить цвет каждой метки в ТК.

Вот мой код:

def monitor_changes():
    registry = ConnectRegistry(None, HKEY_CURRENT_USER)
    key = OpenKey(registry, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize')
    mode = QueryValueEx(key, "AppsUseLightTheme")
    tk.config(bg="#f0f0f0" if mode[0] else "black")
    tk.after(100,monitor_changes)
    for Label in tk:
        if mode[0]:
            Label.config(bg="#f0f0f0")
        else:
            Label.config(bg="black")

monitor_changes()

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Сделав небольшое изменение в коде acw1668, я смог заставить его работать. Вот рабочий код:

def monitor_changes():
    registry = ConnectRegistry(None, HKEY_CURRENT_USER)
    key = OpenKey(registry, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize')
    mode = QueryValueEx(key, "AppsUseLightTheme")
    tk.config(bg="#f0f0f0" if mode[0] else "black")
    # go through all the children of tk
    for widget in tk.winfo_children():
        # check whether widget is instance of Label
        if isinstance(widget, Label):
            widget.config(background="#f0f0f0" if mode[0] else "black")
            widget.config(foreground="white")
    tk.after(100,monitor_changes)

monitor_changes()
0 голосов
/ 15 апреля 2020

Что я понимаю, что tk является экземпляром Tk(). Затем вы можете использовать tk.winfo_children(), чтобы получить всех детей tk, и использовать isinstance(), чтобы проверить, является ли ребенок Label:

def monitor_changes():
    registry = ConnectRegistry(None, HKEY_CURRENT_USER)
    key = OpenKey(registry, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize')
    mode = QueryValueEx(key, "AppsUseLightTheme")
    tk.config(bg="#f0f0f0" if mode[0] else "black")
    # go through all the children of tk
    for widget in tk.winfo_children():
        # check whether widget is instance of Label
        if isinstance(widget, Label):
            widget.config(bg="#f0f0f0" if mode[0] else "black")
    tk.after(100,monitor_changes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...