2014-01-07 5 views
2

Я пытаюсь создать графический интерфейс с вкладками в Python, и я хочу иметь возможность переключать состояние включения/отключения вкладок (т. Е. Запретить пользователю переключать вкладки и призрачные неактивные вкладки, чтобы сделать этот факт очевидным). До сих пор я не мог понять, как это сделать.Как включить и отключить вкладки в графическом интерфейсе Tkinter/Tix Python

Я решил пойти с Tkinter и/или Tix, потому что они встроены в дистрибутивы Python в Windows (направление моих пользователей путем установки дополнительных сторонних зависимостей будет больше проблем, чем того стоит). Я работал с Tkinter немного, но никогда Tix до сих пор - вкладки, похоже, требуют этого. Поэтому я построил два вкладками Tix.NoteBook на основе демо на http://svn.python.org/projects/python/trunk/Demo/tix/samples/NoteBook.py

Для отключения вкладки, единственный соответствующий атрибут лепестка экземпляра Tix (например, nb.hard_disk в демо-коде), кажется, configure() но наивно делать что-то Tkinter-like, то есть nb.hard_disk.configure(state=Tix.DISABLED), результаты TclError: unknown option "-state"

Ищет «отключить вкладку ноутбука Tix», ничего не дает, и даже более общий «отключить виджет Tix» не дает ничего, что я могу понять/использовать. Благодарен за любые указатели в правильном направлении.

ответ

6

В целом, как отключить виджеты в Tkinter, установите параметр «состояние» на Tk.DISABLED или более надежно, просто установив его в строку, указанную "disabled". Следующий затемняются и отключает вкладку:

notebook.tab(0, state="disabled")

с 0 является индексом вкладки вы хотите отключить, и ноутбуком является вашим объектом ноутбука. Отвечает ли это на ваш вопрос?

Ниже приведен простой пример, ноутбук, чтобы продемонстрировать:

import Tkinter 
import ttk 

window = Tkinter.Tk() 
notebook = ttk.Notebook(window) 
notebook.pack() 
subframe = Tkinter.Frame(window) 
subframe.pack() 
notebook.add(subframe, text="tab", state="normal") 
def buttonaction(): 
    notebook.tab(0, state="disabled") 
button = Tkinter.Button(subframe, command=buttonaction, text="click to disable tab") 
button.pack() 

if __name__ == "__main__": 
    window.mainloop() 
+0

Хм, спасибо ... Это sooort-оф помогает, потому что он ставит меня на трек ttk вместо Tix. После этого кажется, что Tix довольно устарел, и ttk, о котором я не слышал, - это путь. Но, к сожалению, для разных раздражающих причин мне придется много работать, прежде чем я смогу наконец освободиться от необходимости поддерживать Python 2.5 - и из коробки, Python 2.5 для Windows поставляется с Tix, а не с ttk. Поэтому я действительно ищу решение Tix. – jez

+0

Наверное, у меня создалось впечатление, что вы хотели, чтобы это решение Tkinter или решение Tix (кстати, я ошибочно написали Wx в своем ответе). И, возможно, ttk на самом деле не такой же, как Tkinter, но, насколько я понимаю, это аддон/расширение для Tkinter, которое вам нужно, среди прочего, для использования виджета Notebook. Ну, к сожалению, у меня нет совета по Tix, но надеюсь, что, может быть, мой пример поставит вас на правильное решение Tix. –

+0

+1 для 'ttk' ;-). – Fenikso

0

Это может быть то, что вы ищете:

nb.pageconfigure('hard_disk', state=Tix.DISABLED) 

http://tix.sourceforge.net/dist/current/man/html/TixCmd/tixNoteBook.htm#M27

+0

Это выигрывает щедрость, потому что он поставил меня на путь решения, которое я могу использовать в своей текущей системе, хотя я признаю, что начать с нуля с помощью ttk (подход Карима) будет более аккуратным. Не существует метода '.pageconfigure', но после небольшого количества поисковых запросов и приземления на https://mail.python.org/pipermail/tkinter-discuss/2009-April/001916.html я нашел рабочее решение' nb. tk.call (nb._w, 'pageconfigure', 'hard_disk', '-state', 'disabled') ' – jez