Tkinter
Установка - оказался встроенным.
Импорт:
import tkinter
from tkinter import *
import tkinter as tk
Общая последовательность действий:
- Создать главное окно.
- Создать виджеты и выполнить конфигурацию их свойств (опций).
- Определить события, то есть то, на что будет реагировать программа.
- Описать обработчики событий, то есть то, как будет реагировать программа.
- Расположить виджеты в главном окне.
- Запустить цикл обработки событий.
Создается главное окно от класса Tk модуля tkinter.
root = Tk()
Пример окна:
from tkinter import *
root = Tk()
ent = Entry(root,width=20) #поле ввода
but = Button(root, text="Преобразовать") #кнопка
lab = Label(root, width=20, bg='black', fg='white') #метка
def str_to_sort_list(event):
s = ent.get()
lab['text'] = s
but.bind('<Button-1>', str_to_sort_list) #событие левой кнопки мыши
ent.pack() #размещение элементов при помощи менеджера геометрии
but.pack()
lab.pack()
root.mainloop() #основной цикл
Объектно-ориентированный подход
from tkinter import *
class Block:
def __init__(self, master, func):
self.ent = Entry(master, width=20)
self.but = Button(master, text="Преобразовать")
self.lab = Label(master, width=20, bg='black', fg='white')
self.but['command'] = self.str_to_sort
#self.but['command'] = getattr(self, func) #вариант с передачей имени функции
self.ent.pack()
self.but.pack()
self.lab.pack()
def str_to_sort(self):
s = self.ent.get()
self.lab['text'] = s
def str_reverse(self):
s = self.ent.get()
self.lab['text'] = s + '1'
root = Tk()
first_block = Block(root)
#first_block = Block(root, 'str_to_sort')
#second_block = Block(root, 'str_reverse')
root.mainloop()
События в этом случае определяются по-другому (через свойство).
Есть стилизация через ttk, типа удобнее, узнать.
Если потом работать с элементами не нужно, то без присвоения переменной
Label(text="Пункт выдачи").pack()
Менеджеры геометрии
Три менеджера геометрии – упаковщик (pack), сетка (grid) и размещение по координатам (place). В одном окне (или родительском виджете) нельзя комбинировать разные менеджеры.
Pack
Объекты применяются последовательно, относительно заданной точки в противоположную сторону. Сторона задается параметром side. Окно создается максимальным размером элементов.
По умолчанию side = TOP.
Внутренние (ipadx, ipady) отступы и внешние (padx и pady) отступы.
Изменение размеров окна.
expand (расширение, по умолчанию 0) - равномерное размещение по вертикали.
fill (заполнение) - какое направление экрана заполняем. Может быть NONE, BOTH, X, Y. Без expand не работает.
l1.pack(expand=1, fill=Y)
anchor (якорь) – может принимать значения N (north – север), S (south – юг), W (west – запад), E (east – восток) и их комбинации.
Вложения блоков
Для вложения используются классы Frame и LabelFrame (с подписью)
f_top = LabelFrame(text="Верх")
l1 = Label(f_top, width=7, height=4, bg='yellow', text="1")
Т е размещаем Frame, затем размещаем элементы.
Виджеты
Свойство | Назначение | Пример |
text | Надпись на кнопке | b1['text'] = "Изменено" |
command | Настройка действия |
b1.config(command=change) self.but['command'] = self.str_to_sort (change - настроенная ранее функция) |
width и height | Ширина и высота. | По умолчанию ширина и высота текста |
bg , fg | Цвет фона и текста | b1['bg'] = '#000000' |
activebackground, activeforeground | Цвет фона и текста во время нажатия | |
font | Шрифт | b1["font"] = ("Comic Sans MS", 24, "bold") |
Label метка. Похожа на кнопку. Нет опции command, связь с событием с помощью bind.
Свойство | Назначение | Пример |
bd | Ширина границы вокруг метки |
Entry, text однострочное и многострочное поле ввода
Свойство / метод | Назначение | Пример |
get | Получить текст | s = ent.get() |
insert(position, text) | Вставить текст. Позиция: 0, END |
e1.insert(0, t.strftime('%H:%M:%S '))
|
delete | Удалить текст | |
justify |
Выравнивание строки CENTER - по центру |
Text:
Свойство / метод | Назначение | Пример |
wrap |
Правило переноса. WORD - по словам. |
text = Text(width=25, height=5, bg="darkgreen", fg='white', wrap=WORD) |
Скролл для текста (и не только для текста) сначала нужно создать |
text = Text(width=20, height=7) text.pack(side=LEFT) scroll = Scrollbar(command=text.yview) scroll.pack(side=LEFT, fill=Y) text.config(yscrollcommand=scroll.set) |
|
insert |
номер строки и номер столбца Нумерация строк с единицы, а столбцов – с нуля |
text.insert(1.0, s) |
Разное форматирование в текстовом поле. |
text.tag_add('title', 1.0, '1.end') text.tag_config('title', justify=CENTER, font=("Verdana", 24, 'bold')) |
Radiobutton радиокнопки, Checkbutton флажки
Listbox списки
Свойство / метод | Назначение | Пример |
insert |
Добавить элемент Индекс (0-начало, END-конец) |
for i in ["1", "2"]: lbox.insert(0,i) |
Окно выбора файла
- askopenfilename. Открывает диалоговое окно для выбора файла и возвращает путь к выбранному файлу. Если файл не выбран, возвращается пустая строка.
- askopenfilenames. Открывает диалоговое окно для выбора файлов и возвращает список путей к выбранным файлам.
- askdirectory. Открывает диалоговое окно для выбора каталога (нельзя выбрать несколько каталогов).
- asksaveasfilename. Открывает диалоговое окно для сохранения файла, вместо открытия его.
from tkinter import filedialog
filename = filedialog.askopenfilename() # Открываем диалоговое окно для выбора файла
print(filename)