Виджет Text

Создание многострочного текстового поля

Последнее обновление: 24.09.2022

Text предназначен для отображения и редактирования многострочного текста. Стоит отметить, что данный виджет доступен только в основном пакете tkinter, в пакете tkinter.ttk аналога нет.

Основные параметры конструктора Text:

  • bd / borderwidth: толщина границы

  • bg/background: фоновый цвет

  • fg/foreground: цвет текста

  • font: шрифт текста, например, font="Arial 14" - шрифт Arial высотой 14px, или font=("Verdana", 13, "bold") - шрифт Verdana высотой 13px с выделением жирным

  • height: высота в строках

  • padx: отступ от границ кнопки до ее текста справа и слева

  • pady: отступ от границ кнопки до ее текста сверху и снизу

  • relief: определяет тип границы, может принимать значения SUNKEN, RAISED, GROOVE, RIDGE

  • state: устанавливает состояние кнопки, может принимать значения DISABLED, ACTIVE, NORMAL (по умолчанию)

  • width: ширина в символах

  • wrap: указывает, каким образом переносить текст, если он не вмещается в границы виджета

Простейший Text:

from tkinter import *

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

editor = Text()
editor.pack(fill=BOTH, expand=1)
 
root.mainloop()
виджет Test в tkinter и python

Перенос текста

Иногда предложения в текстовом поле могут быть очень большими, что могут не помещаться в отведенное для них пространство виджета. В этом случае большое значение имеет стратегия переноса, которая устанавливается с помощью параметра wrap. Этот параметр может принимать следующие параметры:

  • none: переносы отстуствуют, но можно сделать горизонтальную прокрутку

  • char: переносы осуществляются по символам

  • word: переносы осуществляются по словам

Сравнение:

from tkinter import *

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200") 

char_editor = Text(height=5, wrap="char")
char_editor.pack(anchor=N, fill=X)

word_editor = Text(height=5, wrap="word")
word_editor.pack(anchor=S, fill=X)

root.mainloop()
Перенос текста в виджете Text в Tkinter и python

Прокрутка текста

Используя Scrollbar, можно добавить в Text прокрутку текста:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200") 
root.grid_columnconfigure(0, weight = 1)
root.grid_rowconfigure(0, weight = 1)

editor = Text(wrap = "none")
editor.grid(column = 0, row = 0, sticky = NSEW)

ys = ttk.Scrollbar(orient = "vertical", command = editor.yview)
ys.grid(column = 1, row = 0, sticky = NS)
xs = ttk.Scrollbar(orient = "horizontal", command = editor.xview)
xs.grid(column = 0, row = 1, sticky = EW)

editor["yscrollcommand"] = ys.set
editor["xscrollcommand"] = xs.set

root.mainloop()

Здесь для виджета определяются две полосы прокрутки - вертикальная и горизонтальная, соответственно, для каждой определяется свой элемент Scrollbar. Один (ys) имеет вертикальную ориентацию, а второй (xs) - горизонтальную. А у Text устанавливаются команды yscrollcommand и xscrollcommand с помощью соответствующих скроллбаров.

вертикальная и горизонтальная прокрутка в Text в Tkinter и Python

Стоит отметить, что поскольку создание прокрутки для виджета Text является довольно распространенной задачей, то в Tkinter также по умолчанию есть аналог виджета Text с готовой вертикальной прокруткой - ScrolledText (в пакете tkinter.scrolledtext):

from tkinter import *
from tkinter.scrolledtext import ScrolledText

root = Tk()
root.title("METANIT.COM")
root.geometry("250x150") 

st = ScrolledText(root, width=50,  height=10)
st.pack(fill=BOTH, side=LEFT, expand=True)

root.mainloop()
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850