Программирование GUI на Python с помощью Tkinter. Tkinter Text
Tkinter — графическая библиотека для Python, которая используется для разработки графического интерфейса на Python (начиная с Python 3.0, Tkinter переименована в tkinter). Tkinter является интерфейсом к tcl/tk и расшифровывается как Tk interface.
Эта библиотека кроссплатформенна и может применяться в многих распространённых ОС: Linux, Mac OS X, Windows. Кроме того, Tkinter включена в стандартный дистрибутив Python.
Так как библиотека Tkinter — это достаточно прозрачный интерфейс к tcl/tk, то основной источник информации для неё — man-страницы tcl/tk. Данные страницы есть в любой Unix-системе и доступны онлайн.
Импорт
Импортируется Tkinter точно так же, как и любая другая библиотека на Python:
# для python 2.7 и ниже import Tkinter # для python 3.0 и выше import tkinter
Либо так:
# для python 2.7 и ниже from Tkinter import * # для python 3.0 и выше from tkinter import *
В Tkinter визуальные контроллы называют виджетами (widget — стандартизированный компонент графического интерфейса, с которым пользователь осуществляет взаимодействие).
Text в Tkinter
Text представляет собой виджет, позволяющий пользователю вводить любое количество текста. Text имеет дополнительное свойство wrap, которое отвечает за перенос (чтобы переносить по словам, используют значение WORD).
Пример:
from Tkinter import * root=Tk() text1=Text(root,height=7,width=7,font='Arial 14',wrap=WORD) text1.pack() root.mainloop()
В нашем случае методы insert, get и delete выполняют добавление, извлечение и удаление текcта. Первый аргумент является местом вставки в виде 'x.y', где x является строкой, а y – столбцом.
Пример:
text1.insert(1.0,'Добавим Текст\n\ в начало 1-й строки') text1.delete('1.0', END) # Удалим всё text1.get('1.0', END) # Извлечем всё
Таким образом, с помощью Text в Tkinter мы можем запрограммировать многострочное текстовое поле. К слову, такой виджет нередко используется при заполнении web-форм. По умолчанию его размер составляет 80 знакомест по горизонтали и 24 по вертикали.
Но данные свойства мы можем поменять, используя опции width и height. Также можно конфигурировать шрифт, цвет и пр.
from tkinter import * root = Tk() text = Text(width=25, height=5, bg="darkgreen", fg='white', wrap=WORD) text.pack() root.mainloop()
Text и Scrollbar
Когда в текстовое поле вводят больше линий текста, чем его высота, поле само будет прокручиваться вниз. Для прокрутки можно использовать колесико мышки, стрелки на клавиатуре или скроллер — полосу прокрутки.
В Tkinter скроллеры производятся с помощью класса Scrollbar. В этом случае объект-скроллер связывается с виджетом, которому он нужен. И речь сейчас идёт не обязательно о многострочном текстовом поле. Нередко полосы прокрутки используются и в списках.
from tkinter import * root = Tk() 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) root.mainloop()
В примере мы создаём скроллер, к которому через опцию command привязываем прокрутку текстового поля по оси y –
Методы Text
Главные методы у Text мы уже упоминали –
from tkinter import * def insertText(): s = "Hello World" text.insert(1.0, s) def getText(): s = text.get(1.0, END) label['text'] = s def deleteText(): text.delete(1.0, END) root = Tk() text = Text(width=25, height=5) text.pack() frame = Frame() frame.pack() b_insert = Button(frame, text="Вставить", command=insertText) b_insert.pack(side=LEFT) b_get = Button(frame, text="Взять", command=getText) b_get.pack(side=LEFT) b_delete = Button(frame, text="Удалить", command=deleteText) b_delete.pack(side=LEFT) label = Label() label.pack() root.mainloop()
Собственно говоря, методы
Теги
Особенность текстового поля библиотеки Tkinter — возможность форматировать текст непосредственно в нём, придавая разным его частям различное оформление. Реализуется это посредством методов
from tkinter import * root = Tk() text = Text(width=50, height=10) text.pack() text.insert(1.0, "Hello world!\nline two") text.tag_add('title', 1.0, '1.end') text.tag_config('title', font=("Verdana", 24, 'bold'), justify=CENTER) root.mainloop()
Вставка виджетов в текстовое поле
В Text мы можем вставлять и другие виджеты, используя метод
from tkinter import * def smile(): label = Label(text=":)", bg="yellow") text.window_create(INSERT, window=label) root = Tk() text = Text(width=50, height=10) text.pack() button = Button(text=":)", command=smile) button.pack() root.mainloop()
Разместив метку в функции, мы сможем каждый раз при вызове функции создавать новую метку. В обратном случае, если бы метка находилась в основной ветке нашей программы, предыдущая бы исчезала.
Подробнее о Tkinter и программировании GUI на Python читайте в официальной документации или на обучающих сайтах. Также мы рекомендуем пройти углубленный курс Python-разработки от опытных IT-специалистов: