Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2013 21:24:15

solomon243
От:
Зарегистрирован: 2012-02-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

хочу в интерфейсе организовать вкладки, переключающие фреймы с виджетами. Есть ли стандартные средства в tkinter? Ну или какой-нибудь простой класс?



Офлайн

#2 Фев. 11, 2013 23:18:25

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

solomon243
Вы ошиблись разделом… Перенесите тему в раздел по GUI и я Вам полностью отвечу на Ваш вопрос.


Done



Отредактировано FishHook (Фев. 12, 2013 05:27:39)

Офлайн

#3 Фев. 12, 2013 21:39:18

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

Как понимаю, благодарить нужно cutwater…
Механизма построения вкладок в Tkinter нет, нужно писать самому…

На самом деле, закладки в GUI не нужны. Это уже пережиток прошлого. Как пишут в книгах по разработке и дизайну пользовательского интерфейса вкладки существенно портят ментальную модель, так как пользователь не может запомнить вкладки, так как они налеплены друг на друга.
Более разумным является использование вместо закладок сместь списка и окна настроек (слева список, справа - выбор и настройка), как это реализовано в окне (Сервис-Параметры) Open office. Такой подход считается более читабельным и создает хорошую ментальную модель окна.

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

Но если это все не подходит - пишите. Когда-то, когда еще разбирался с Tkinter и питоном вообще мне пришлось на заказ писать одну программу. Полностью ее я вывешивать не буду, чтобы не позориться, но тот кусок, который отвечал за закладки могу и показать. Единственное ограничение - там закладки не могли отображаться каскадом, а отображались только в линию. Хотя, я думаю, можно и допедалировать…
Если очень нужо, то я выложу, но за качество кода не отвечаю :) Сам был зеленый - зеленый + клиент был дубовый - дубовый…



Отредактировано 4kpt (Фев. 12, 2013 21:43:55)

Офлайн

#4 Фев. 13, 2013 21:58:54

solomon243
От:
Зарегистрирован: 2012-02-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

4kpt
Но если это все не подходит - пишите. Когда-то, когда еще разбирался с Tkinter и питоном вообще мне пришлось на заказ писать одну программу. Полностью ее я вывешивать не буду, чтобы не позориться, но тот кусок, который отвечал за закладки могу и показать. Единственное ограничение - там закладки не могли отображаться каскадом, а отображались только в линию. Хотя, я думаю, можно и допедалировать…Если очень нужо, то я выложу, но за качество кода не отвечаю :) Сам был зеленый - зеленый + клиент был дубовый - дубовый…

Если есть возможность - код в студию! Каскадность там не нужна. всего 4-5 вкладок…










Офлайн

#5 Фев. 16, 2013 09:12:41

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Вкладки. Средствами 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()



Офлайн

#6 Фев. 16, 2013 11:17:12

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

sp3
Спасибо. Мне не пришлось свой левый код выкладывать. Надо будет по ttk документацию почитать. Вижу много чего из него можно вытянуть :)



Офлайн

#7 Фев. 16, 2013 12:06:10

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

sp3
Заодно вопросик. Почему некоторый код, который дан в документации к ttk не работает на 2.x?
Получается, что ttk заточен по 3.х



Офлайн

#8 Фев. 16, 2013 20:56:03

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

Какой код?



Офлайн

#9 Фев. 16, 2013 21:48:50

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

Да ну хотя-бы этот?

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()



Офлайн

#10 Фев. 16, 2013 22:39:50

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Вкладки. Средствами tkinter.

2.6 - все работает



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version