Форум сайта python.su
хочу в интерфейсе организовать вкладки, переключающие фреймы с виджетами. Есть ли стандартные средства в tkinter? Ну или какой-нибудь простой класс?
Офлайн
solomon243
Вы ошиблись разделом… Перенесите тему в раздел по GUI и я Вам полностью отвечу на Ваш вопрос.
Done
Отредактировано FishHook (Фев. 12, 2013 05:27:39)
Офлайн
Как понимаю, благодарить нужно cutwater…
Механизма построения вкладок в Tkinter нет, нужно писать самому…
На самом деле, закладки в GUI не нужны. Это уже пережиток прошлого. Как пишут в книгах по разработке и дизайну пользовательского интерфейса вкладки существенно портят ментальную модель, так как пользователь не может запомнить вкладки, так как они налеплены друг на друга.
Более разумным является использование вместо закладок сместь списка и окна настроек (слева список, справа - выбор и настройка), как это реализовано в окне (Сервис-Параметры) Open office. Такой подход считается более читабельным и создает хорошую ментальную модель окна.
Другой альтернативой закладок являются управляемые мастера, т.е. это такие мастера, переход по элементам которых осуществляется слева-на-право, но они позволяют случайно переходить на любое окно (почти как закладки). История переходов отображается сверху. Открытое окно (или раздел) подсвечивается или выделяется с помощью шрифта. Такое решение считается хуже предыдущего, но тоже может быть использовано и все равно это будет лучше чем решение с закладками.
Но если это все не подходит - пишите. Когда-то, когда еще разбирался с Tkinter и питоном вообще мне пришлось на заказ писать одну программу. Полностью ее я вывешивать не буду, чтобы не позориться, но тот кусок, который отвечал за закладки могу и показать. Единственное ограничение - там закладки не могли отображаться каскадом, а отображались только в линию. Хотя, я думаю, можно и допедалировать…
Если очень нужо, то я выложу, но за качество кода не отвечаю :) Сам был зеленый - зеленый + клиент был дубовый - дубовый…
Отредактировано 4kpt (Фев. 12, 2013 21:43:55)
Офлайн
4kpt
Но если это все не подходит - пишите. Когда-то, когда еще разбирался с Tkinter и питоном вообще мне пришлось на заказ писать одну программу. Полностью ее я вывешивать не буду, чтобы не позориться, но тот кусок, который отвечал за закладки могу и показать. Единственное ограничение - там закладки не могли отображаться каскадом, а отображались только в линию. Хотя, я думаю, можно и допедалировать…Если очень нужо, то я выложу, но за качество кода не отвечаю :) Сам был зеленый - зеленый + клиент был дубовый - дубовый…
Офлайн
import Tkinter import ttk root = Tkinter.Tk() n = ttk.Notebook(root) n.pack(fill='both', expand=True) pages = [] for page in range(5): child = ttk.Frame(root) lab = ttk.Label(child, text='text %i'%page) lab.pack() n.add(child, text ='page %i'%page ) pages.append(child) textForPage1 = Tkinter.Text(pages[1]) textForPage1.pack(fill='both', expand=True) root.mainloop()
Офлайн
sp3
Спасибо. Мне не пришлось свой левый код выкладывать. Надо будет по ttk документацию почитать. Вижу много чего из него можно вытянуть :)
Офлайн
sp3
Заодно вопросик. Почему некоторый код, который дан в документации к ttk не работает на 2.x?
Получается, что ttk заточен по 3.х
Офлайн
Какой код?
Офлайн
Да ну хотя-бы этот?
import ttk import Tkinter root = Tkinter.Tk() ttk.Style().configure("TButton", padding=10, relief="sunken", background="red") btn = ttk.Button(text="Sample", style="TButton") btn.pack() root.mainloop()
Офлайн
2.6 - все работает
Офлайн