ttk: виджет входа отключен, цвет фона отключен

У меня есть запись ttk, которая находится в «отключенном» состоянии. Цвет фона поля ввода, когда он отключен, имеет светло-голубой оттенок. Как я могу изменить его на серый цвет по умолчанию? Из этого поста я понял, как мы можем изменить цвет переднего плана. ​​виджет tkinter ttk Entry -disabledforeground

Я попробовал тот же метод для цвета фона, и он не сработал. Я использую Python 2.7 в Windows 7.

Это код, который я пробовал в соответствии с вышеупомянутым сообщением:

from Tkinter import *
from ttk import *

root=Tk()

style=Style()
style.map("TEntry",background=[("active", "black"), ("disabled", "red")])
entry_var=StringVar()
entry=Entry(root,textvariable=entry_var,state='disabled')
entry.pack()
entry_var.set('test')

root.mainloop()

person newbieuser    schedule 28.12.2015    source источник


Ответы (2)


Вам не нужно использовать стили. Вы можете изменить цвет отключенной записи с помощью опции disabledbackground=<color>. Вы можете использовать эту опцию при создании записи, например:

entry.config(background="black",disabledbackground="red")

Итак, ваш общий код (пример):

from tkinter import *
import time
root=Tk()
entry=Entry(root,state='disabled')
entry.config(background="black",disabledbackground="red")
entry.pack()
root.mainloop()

Вот скриншот графического интерфейса:

введите описание изображения здесь

person Black Thunder    schedule 16.08.2018
comment
Прошу прощения, я случайно проголосовал за этот ответ. Я не могу изменить свой голос, если вы не отредактируете ответ - person Bryan Oakley; 21.07.2019
comment
@BryanOakley Это не проблема :). Я отредактировал свой пост. - person Black Thunder; 21.07.2019

В виджетах записей ttk и Tk background относится к разным вещам. В записи Tk background относится к цвету текста, в записи ttk background относится к цвету виджета. (Да, я знаю, сбивает с толку, верно?), то, что вы хотите изменить, это fieldbackground. Таким образом, ваш код будет

from Tkinter import *
from ttk import *

root=Tk()

style=Style()
style.map("TEntry",fieldbackground=[("active", "black"), ("disabled", "red")])
entry_var=StringVar()
entry=Entry(root,textvariable=entry_var,state='disabled')
entry.pack()
entry_var.set('test')

root.mainloop()
person Noel Segura Meraz    schedule 28.12.2015
comment
я видел это: wiki.tcl.tk/37973. и попробовал как background, так и fieldbackground, как вы предложили. Оба у меня не работают - person newbieuser; 28.12.2015
comment
@newbieuser Странно, у меня так работает. Я использую питон 2.7. Работает ли использование виджета Tkinter Entry для вас? - person Noel Segura Meraz; 28.12.2015
comment
@newbieuser entry=Entry(root,textvariable=entry_var,state='disabled') entry.configure(disabledbackground='red') без import ttk - person Noel Segura Meraz; 28.12.2015
comment
print(Tkinter.__version__) $Редакция: 81008 $ print ttk.__version__ 0.3.1 - person Noel Segura Meraz; 28.12.2015
comment
да, он работает для Tkinter Entry, используя disabledbackground - person newbieuser; 28.12.2015
comment
@newbieuser, тогда я действительно заблудился. Извините, я не могу предложить больше помощи - person Noel Segura Meraz; 28.12.2015
comment
Этот ответ предполагает, что fieldbackground не поддерживается стилем Windows. - person tm1; 14.08.2018
comment
Я проголосовал за это, это работает для меня. Для Python3 мне пришлось внести несколько изменений: tkinter в нижнем регистре в импорте // из tkinter import ttk // добавить ttk в Style -> ttk.Style() // entry=ttk.Entry. У меня не получилось работать с обычным файлом из ttk import * . - person JC Cheloven; 06.05.2021