Skip to main content

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.

image.png

По умолчанию side = TOP

Виджеты

Button кнопка

СвойствоНазначениеПример
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 - по центру


 

 

Окно выбора файла

  • askopenfilename. Открывает диалоговое окно для выбора файла и возвращает путь к выбранному файлу. Если файл не выбран, возвращается пустая строка.
  • askopenfilenames. Открывает диалоговое окно для выбора файлов и возвращает список путей к выбранным файлам.
  • askdirectory. Открывает диалоговое окно для выбора каталога (нельзя выбрать несколько каталогов). 
  • asksaveasfilename. Открывает диалоговое окно для сохранения файла, вместо открытия его.

 

from tkinter import filedialog  
filename = filedialog.askopenfilename()  # Открываем диалоговое окно для выбора файла  
print(filename)