Кнопки, поля ввода, списки, метки и т.д. в концепции Tk это виджеты. В Tk, на момент написания этой заметки, существует два набора виджетов оформленных в виде сабмодулей. Это классический Tk и TTk. Большинство виджетов в этих модулях очень похожи. 18 элементов управления есть и в tk и ttk. Я когда начинал пользоваться Tkinter никак не мог понять зачем тут всё так устроено. Зачем дублируется идентичный функционал. И когда какие виджеты (из каких модулей) мне использовать. Именно на этот вопрос, без сильного погружения в тонкости я попробовал ответить в видео ниже:
Выжимка, чем отличаются виджеты из Tk и TTk
Tk (Tool Kit for Tcl, or Tool Command Language, is an open-source multi-purpose C library which includes a powerful dynamic scripting language. ) — набор виджетов который появился ещё в 90х. Его основной идеей была кроссплатформенные пользовательские интерфейсы. Со временем этот набор виджетов стал устаревать и основной проблемой стала сложность в отделении дизайна от бизнес-логики, поэтому был разработан набор виджетов TTk ( Themed Tool Kit ).
Удобно сравнить Tk с HTML. В HTML тоже можно писать стили прямо в атрибутах тегов, а можно вынести в таблицы стилей. Следуя этой аналогии Tk — это теги дизайн к которым можно писать только в атрибутах, а TTk — это теги дизайн которых описывается только таблицах стилей.
При этом в коде на Python с использованием Tkinter можно одновременно использовать виджеты и Tk и TTk.
Полезные ссылки
- Описание модуля Tkinter.ttk на сайте Python
- Документация по всем виджетам, как tk, так и ttk
- Имена классов стилей ttk, чтобы знать что стилизовать
- Про стилизацию и темы ttk
- Доки на все виджеты Tk в первоисточнике
В видео не сложного кода, однако то что есть смотри ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import tkinter from tkinter import Tk, Text, Label, Frame, ttk import tk """ Tkinter.tk vs Tkinter.ttk tool kit = tk, themed tk = ttk 1. стилизация (тк - проще, ттк - богаче) 2. темизация (переключение, создание своих) 3. набор виджетов - в ttk 18 виджетов таких же как и в tk, и 6 дополнительных, но нет 2х что есть в tk (Text, Canvas) в одном контейнере можно использовать виджеты и из tk и из ttk - отличие дизайна по дефолту - ttk переключение тем - стилизация в tk - стилизация в ttk https://docs.python.org/3/library/tkinter.ttk.html https://tkdocs.com/shipman/ https://tkdocs.com/shipman/ttk-style-layer.html https://tkdocs.com/tutorial/styles.html https://tcl.tk/man/tcl8.6/TkCmd/contents.htm """ if __name__ == '__main__': print("** Hola Hey, Azzrael_YT subs!!!\n") r = Tk() r.geometry("600x600+960+120") pargs = {'pady':5, 'padx':5, 'anchor': tkinter.NW} ftk = tkinter.LabelFrame(text="tk виджеты", bg="#ff0000") fttk = tkinter.LabelFrame(text="ttk виджеты", bg="#00ff00") style = ttk.Style() style.theme_use("default") # print([style.theme_use(), style.theme_names()]) # print(style.element_options("TButton.label")) style.configure("TButton", background="orange", foreground="white") # style.configure('TEntry', padding="20 10 5 0") # style.configure('red.TLabel', foreground="#dd0000", font=("Arial", 22)) # style.map('TButton', background=[('active', 'red')]) tkinter.Label(ftk, text="Это метка").pack(pargs) ttk.Label(fttk, text="Это метка").pack(pargs) # ttk.Label(fttk, text="Это метка красная", style="red.TLabel").pack(pargs) args = {'bg' : "#dd0000", 'fg' : "aqua"} btk = tkinter.Button(ftk, text="Кнопка", **args) btk.pack(pargs) bttk = ttk.Button(fttk, text="Кнопка") bttk.pack(pargs) # Как узнать класс виджета https://tkdocs.com/shipman/ttk-style-layer.html # print([btk.winfo_class(), bttk.winfo_class()]) tkinter.Entry(ftk, text="Кнопка").pack(pargs) ttk.Entry(fttk, text="Кнопка").pack(pargs) ftk.pack(fill="both", expand=1) fttk.pack(fill="both", expand=1) r.mainloop() |
Если у вас есть вопросы или я в чем то не прав — смело пишите в комментариях здесь, а лучше в комментариях к видео на Youtube. Стараюсь всем отвечать, а комментарии (так же как и лайки/дислайки) говорят помогают видосикам в продвижении, а, следовательно, мотивирует меня снимать дальше. Ну спасибо что дочитали/досмотрели!