Python: ttk: отключить/включить кнопку

Я хочу изменить состояние ttk.Button в соответствии с некоторой внутренней логикой. Я создаю кнопку и связываю с ней стиль:

cardBtnStyle = ttk.Style()
cardBtnStyle.configure('CB.TButton')
cardBtn = ttk.Button(top, text="Make SD card", style='CB.TButton', command = cardCreateCallBack).grid(column=1, row=5)

Следующее утверждение не имеет никакого эффекта:

style.configure('CB.TButton', state='disabled')

Но когда я создаю такую ​​кнопку, она отключена:

cardBtn = ttk.Button(top, text="Make SD card", style='CB.TButton', state='disabled', command = cardCreateCallBack).grid(column=1, row=5)

Как изменить состояние ttk.Button в Python?

ОС: Убунту 13.10

Питон: 2.7.5+


person yegorich    schedule 10.02.2014    source источник


Ответы (1)


Состояние кнопки не является частью ее стиля. Вы можете использовать метод state(), чтобы изменить его. :

cardBtn.state(["disabled"])   # Disable the button.
cardBtn.state(["!disabled"])  # Enable the button.
person Frédéric Hamidi    schedule 10.02.2014
comment
Я получаю следующую ошибку: Исключение в обратном вызове Tkinter Traceback (последний последний вызов): Файл /usr/lib/python2.7/lib-tk/Tkinter.py, строка 1473, в вызове return self. func(*args) Файл /usr/lib/python2.7/lib-tk/Tkinter.py, строка 534, в callit func(*args) Файл ./viaVPN-Production.py, строка 42, в state_thread cardBtn.state ([отключено]) AttributeError: объект «NoneType» не имеет атрибута «состояние» - person yegorich; 10.02.2014
comment
@yegorich, это сообщение об ошибке означает, что cardBtn установлено на None. Однако код в вашем вопросе присваивает ему экземпляр ttk.Button, поэтому этого не должно быть. Дважды проверьте, вызываете ли вы state() после инициализации экземпляра кнопки. - person Frédéric Hamidi; 10.02.2014
comment
Кажется, я нашел проблему: нельзя создать объект, если разместить его сразу (.grid() или .pack()). Это нужно сделать в два этапа: создать объект и затем разместить его. Таким образом, вы можете использовать его ручку. - person yegorich; 11.02.2014