Tkinter ttk: цвет фона / foregound не будет работать на моем компьютере - PullRequest
0 голосов
/ 16 июня 2019

Если я запускаю этот код через IDLE или виртуальную среду в pycharm в обоих окнах 10 и 7:

import tkinter as tk
from tkinter import ttk

x = tk.Tk()
y = ttk.Treeview(x)
y.insert('',0,values=['red', 'blue'], tags= ('even',))
y['columns'] = ('color1','color2')
for item in y['columns']:
    y.heading(item, text=item)
y.tag_configure('even',foreground='yellow',font=('',25))
y.pack()
x.mainloop()

Он меняет шрифт, но не цвет фона.Этот код работает при запуске из https://repl.it/languages/tkinter, и другой пользователь указал, что он успешно запустил его из ноутбука jupyter.Версии tkinter / tcl идентичны версиям на обоих моих компьютерах.Но, тем не менее, я получаю простые настройки по умолчанию.

Это также, по-видимому, одинаково для всех виджетов ttk, таких как поля со списком.

Я перепробовал каждую тему и возился с отображением в коде tcl.Очень озадачен тем, почему я сталкиваюсь с этой проблемой.Кто-нибудь здесь сталкивался с этим?Возможно, пришло время переключиться на pyQT.

Ответы [ 3 ]

1 голос
/ 16 июня 2019

Тема по умолчанию в Windows при естественном запуске (которая может быть winnative, xpnative или vista) для большинства виджетов ttk (особенно включая древовидное представление) не позволяет изменять цвет фона. Другие темы (например, alt, classic или clam) позволяют изменить этот аспект (или, скорее, они его не игнорируют); только тема должна выбирать, игнорировать или нет ваши настройки, и собственные темы имеют приоритет в соответствии с рекомендациями по проектированию графического интерфейса платформы над указанными вами директивами.

Смотрите также этот вопрос: Как изменить общую тему приложения tkinter?

Обратите внимание, что другие платформы могут иметь еще более ограничительные темы; тема aqua в OSX особенно четко определена. (Изменение темы недостаточно, чтобы приложение чувствовало себя нативным; разные платформы также предпочитают разные виджеты для некоторых операций и имеют разные способы размещения своих графических интерфейсов. Кроме того, некоторые аспекты графического интерфейса работают совершенно по-разному. Создание межплатформенного графического интерфейса пользователя остается трудным. )

1 голос
/ 16 июня 2019

Прежде всего, вы должны указать, на какой ОС работает ваш компьютер.Во-вторых, многие платформы Python GUI не полностью работают в Mac OS (в случае, если это ваш тип ОС).Например, для многих каркасов / инструментариев Python GUI Mac OS имеет тенденцию блокировать способность графического интерфейса пользователя иметь нестандартный цвет фона для открытых окон.Я знаю, что большинство графических интерфейсов Python работают безупречно в ОС Windows, но я не уверен в том, как они работают в Linux, но я почти уверен, что у них есть подобные проблемы с Mac OS, поскольку они оба основаны на Unix (я могу ошибаться здесь, но я не помню по макушке, так что поправьте меня, если я ошибаюсь).Попробуйте поискать документы для tkinter и посмотреть, какие уведомления они имеют для вашей конкретной ОС.

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

0 голосов
/ 17 июня 2019

Пользователь на предыдущем вопросе разместил эту ссылку, прежде чем он удалил свой ответ: https://core.tcl -lang.org / тк / tktview / 509cafafae48cba46796e12d0503a335f0dcfe0b

Что привело меня в правильном направлении. Исправление заключается в удалении некоторого кода из исходного кода темы tcl. Который находится в папке питонов в tcl / ttk. Откройте тему проблем (например, clam, winnative) и найдите этот фрагмент кода:

ttk::style map Treeview \
        -background [list disabled $colors(-frame)\
                {!disabled !selected} $colors(-window) \
                selected $colors(-selectbg)] \
        -foreground [list disabled $colors(-disabledfg) \
                {!disabled !selected} black \
                selected $colors(-selectfg)]

{!disabled !selected} $colors(-window) \ и {!disabled !selected} black \ необходимо удалить. cjmcdonald обнаружил это на форуме tcl-lang. Вы должны в конечном итоге:

ttk::style configure Treeview -background $colors(-window)
    ttk::style map Treeview \
        -background [list disabled $colors(-frame)\
                selected $colors(-selectbg)] \
        -foreground [list disabled $colors(-disabledfg) \
                selected $colors(-selectfg)]

Единственный способ заставить это работать - это удалить прямо из исходного кода. Я уверен, что кто-то здесь может упростить это в Python.

Это исправление только для виджета Treeview, а не для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...