Python tkinter text wrap

# Text — многострочное текстовое поле

Виджет Тext предоставляет расширенные возможности, которые позволяют редактировать многострочный текст и форматировать способ его отображения, например изменять его цвет и шрифт.

Вы также можете использовать элегантные структуры, такие как вкладки и метки, чтобы найти определенные разделы текста и применить изменения к этим областям. Кроме того, вы можете вставлять окна и изображения в текст, потому что этот виджет был разработан для обработки как простого, так и отформатированного текста.

text_area = Text(master, options) 

где master — ссылка на родительское окно, а options — набор следующих параметров:

  • bg: цвет фона по умолчанию для текстового виджета.
  • bd: ширина границы вокруг текстового виджета. По умолчанию 2 пикселя.
  • font: шрифт по умолчанию для текста, вставляемого в виджет.
  • fg: цвет, используемый для текста (и растровых изображений) в виджете. Вы можете изменить цвет для помеченных регионов; эта опция только по умолчанию.
  • height: высота виджета в строках (не в пикселях!), измеренная в соответствии с текущим размером шрифта.
  • padx: размер внутреннего отступа, добавляемый слева и справа от текстовой области. По умолчанию используется один пиксель.
  • pady: размер внутреннего отступа, добавляемый над и под текстовой областью. По умолчанию используется один пиксель.
  • selectbackground: цвет фона для отображения выбранного текста.
  • selectborderwidth: ширина границы для использования вокруг выделенного текста.
  • spacing1: эта опция указывает, сколько дополнительного вертикального пространства помещается над каждой строкой текста. Если строка переносится, это пространство добавляется только перед первой строкой, которую она занимает на дисплее. По умолчанию 0.
  • spacing2: этот параметр указывает, сколько дополнительного вертикального пространства необходимо добавить между отображаемыми строками текста при переносе логической строки. По умолчанию 0.
  • spacing3: эта опция указывает, сколько дополнительного вертикального пространства добавляется ниже каждой строки текста. Если строка переносится, это пространство добавляется только после последней строки, которую оно занимает на дисплее. По умолчанию 0.
  • state: обычно текстовые виджеты реагируют на события клавиатуры и мыши; установить state=NORMAL , чтобы получить это поведение. Если вы установите state=DISABLED , текстовый виджет не будет отвечать, и вы не сможете изменять его содержимое программным способом.
  • width: ширина виджета в символах (не в пикселях!), измеренная в соответствии с текущим размером шрифта.
  • wrap: эта опция управляет отображением слишком широких линий. Установите wrap=WORD , и он будет разбивать строку после последнего слова, которое будет соответствовать. При поведении по умолчанию, wrap=CHAR , любая слишком длинная строка будет разбита на любой символ.
  • xscrollcommand: чтобы сделать текстовый виджет горизонтально прокручиваемым, установите этот параметр для метода set() горизонтальной полосы прокрутки.
  • yscrollcommand: чтобы сделать текстовый виджет вертикально прокручиваемым, установите этот параметр для метода set() вертикальной полосы прокрутки.
Читайте также:  What is zip file in java

# Методы

Text имеет следующие методы:

  • delete(startindex [,endindex]) — метод удаляет определенный символ или диапазон текста.
  • get(startindex [,endindex]) — метод возвращает определенный символ или диапазон текста.
  • index(index) — возвращает абсолютное значение индекса на основе данного индекса.
  • insert(index [,string]. ) — метод вставляет строки в указанное местоположение индекса.
  • selection_get() — метод возвращает выделенный текст.

Индексы можно указывать ключевыми словами:

  • SEL_FIRST , SEL_LAST — при выделении текста указывает на начало и конец позиций выделенного фрагмента.
  • INSERT — место расположение курсора
  • END — конец текста
  • указывая число: 1.0 , где 1 — указания номера стоки, а 0 — указание номера символа в строке.
from tkinter import * root = Tk() text = Text(root) text.insert(INSERT, "Hello. ") text.insert(END, "Bye Bye. ") text.pack() root.mainloop() 

# Упражнения

  1. Напишите программу с текстовым полем растягивающимся на всё окно. Проверьте правильность работы растяжения изменяя размер окна.
  2. Напишите программу с текстовым полем и кнопкой Add . При нажатии на кнопку происходит добавление текста в текстовое поле: «This is a new text!»
  3. Напишите программу с текстовым полем и кнопками:
    • Copy all — при нажатии на которую, происходит копирование всего текста,
    • Paste — при нажатии на которую, происходит добавление скопированного текста.
  • Copy all — при нажатии на которую, происходит копирование всего текста,
  • Copy — при нажатии на которую, происходит копирование выделенного текста,
  • Paste — при нажатии на которую, происходит добавление скопированного текста в место расположения курсора.
  • Copy — при нажатии, происходит копирование выделенного текста;
  • Cut — при нажатии, происходит вырезание выделенного текста в буфер;
  • Paste — при нажатии, происходит добавление скопированного текста в место расположения курсора.
  • нажатие «Capitalize»: в выделенном тексте первая буква становиться заглавная, остальные маленькие;
  • нажатие «Lower»: в выделенном тексте все буквы становятся строчными (маленькими);
  • нажатие «Upper»: в выделенном тексте все буквы становятся заглавными (большими);
  • нажатие «Title»: в выделенном тексте первая буква каждого слова становится заглавная.
  • общее количество символов (функция len() — возвращает длину строки),
  • общее количество строк,
  • номер строки, в которой находиться курсор,
  • номер символа в строке, в которой находиться курсор.
Читайте также:  Send email with javascript

Пример строки состояния можно подсмотреть в текстовом редакторе, например «Блокнот»:

Источник

Виджет Text

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 : указывает, каким образом переносить текст, если он не вмещается в границы виджета
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 с помощью соответствующих скроллбаров.

Читайте также:  Html on datalist option selected

вертикальная и горизонтальная прокрутка в 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()

Источник

Wrapping of text in tkinter Text

Text Wrap using Menu

Tkinter « Text « Menu

import tkinter as tk my_w = tk.Tk() my_w.geometry("400x300") l1 = tk.Label(my_w,text='Your Name', width=10) #added one Label l1.grid(row=1,column=1) my_wrap=tk.StringVar(value='none') t1 = tk.Text(my_w,width=15,height=4,bg='yellow',wrap=my_wrap.get()) t1.grid(row=1,column=2) def my_fun(): if(t1['wrap']=='word'): t1.config(wrap='none') else: t1.config(wrap='word') #print(t1['wrap']) menubar = tk.Menu(my_w) menu_file = tk.Menu(menubar, tearoff=0,bg='yellow') # file menu_edit=tk.Menu(menubar,tearoff=0) # edit menu menubar.add_cascade(label="File", menu=menu_file) # Top Line menu_file.add_checkbutton(label='Wrap',command=lambda:my_fun()) my_w.config(menu=menubar) # adding menu to window my_w.mainloop()

Using Checkbutton

Text Wrap using Checkbutton

More about Tkinter Checkbutton.

import tkinter as tk my_w = tk.Tk() my_w.geometry("400x300") l1 = tk.Label(my_w,text='Your Name', width=10) #added one Label l1.grid(row=1,column=1) my_wrap=tk.StringVar(value='none') t1 = tk.Text(my_w,width=15,height=4,bg='yellow',wrap=my_wrap.get()) t1.grid(row=1,column=2) def my_fun(): if(t1['wrap']=='word'): t1.config(wrap='none') else: t1.config(wrap='word') c1 = tk.Checkbutton(my_w, text='Wrap text', command=lambda:my_fun()) c1.grid(row=2,column=1) my_w.mainloop()

Источник

Оцените статью