Как очистить entry в tkinter
Tkinter – Clear Entry box
This article explains how to clear the contents of the tkinter entry widget.
The Entry function has a method called delete() which is used to delete the data currently within the Entry box. Don’t worry, the “delete” function will not in any way delete the widget. That’s what the destroy() function is for.
Syntax
The delete() method takes two parameters in total. The first is compulsory, and without it an error will occur. The second is optional.
Passing only one parameter allows us to delete a single character using it’s index position. Remember, indexing in Python starts from 0. The below code will delete the second character, located at index 1.
Below is a sample output of what the above code would produce.
An example demonstrating this is shown below.
Example
Below we’ve used a special character called ‘end’. Using this will automatically determine the end point of the contents and set it to that.
The code below will delete all the characters from index 3 to the end of the contents of the entry widget.
Below we’ve included a short video of us interacting with the output of the above code.
As expected, it will delete characters starting from index “3”. Any characters before that will remain.
This marks the end of the Tkinter Clear Entry article. Any suggestions or contributions for CodersLegacy are more than welcome. Questions regarding the article can be asked in the comments section below.
Как очистить / удалить содержимое текстового виджета Tkinter?
Я пишу программу Python в TKinter на Ubuntu для импорта и печати имя файлов из определенной папки в Text виджет. Это просто добавление файлов к предыдущему filnames в Text виджет, но я хочу сначала очистить его, а затем добавить новый список имен файлов. Но я изо всех сил пытаюсь очистить Text предыдущий список виджета файловые имена.
может кто-нибудь объяснить, как очистить Text виджет?
Screenshoot и кодирование дает ниже:
5 ответов
Я проверил на своей стороне, просто добавив «1.0», и он начинает работать
вы также можете попробовать это
согласно tkinterbook код для очистки текстового элемента должен быть:
это сработало для меня. источник
это отличается от очистки элемента ввода, который выполняется следующим образом:
запись.удалить (0,END) #обратите внимание на 0 вместо 1.0
вот пример txt.delete(1.0,END) Как уже упоминалось.
использование lambda позволяет нам удалять содержимое без определения фактической функции.
надеюсь, что это поможет
для меня «1.0» не работал, но ‘0’ работал. Это Python 2.7.12, просто FYI. Также зависит от того, как вы импортируете модуль. Вот как:
и следующий код вызывается, когда вам нужно, чтобы очистить его. В моем случае была кнопка Save, которая сохраняет данные из текстового поля ввода и нажатию кнопки, текстовое поле очищается
Создание, изменение и проверка текста / tkinter 2
Создание текстовых элементов
Виджет Entry представляет собой текстовый элемент на одной строке. Вместе с классами Label и Button он является одним из самых используемых в Tkinter.
Как создать текстовый элемент
Как работают экземпляры
Экземпляры виджетов Entry создаются в родительском окне или фрейме, будучи переданными в качестве первого аргумента. С помощью опциональных ключевых слов можно задать дополнительные свойства. У username в этом примере таких нет, а у password — аргумент show со строкой «*», который будет выводить каждый символ как звездочку.
Метод delete() принимает два аргумента, которые представляют собой диапазон символов для удаления. Важно только помнить, что индексы начинаются с 0 и не включают последний символ. Если передать только один аргумент, то удалится символ на этой позиции.
Стандартный шаблон сброса содержимого на значение по умолчанию — комбинация методов delete() и insert() :
Еще один паттерн — добавление текста туда, где находится курсор. Для этого используется константа INSERT :
Как и Button класс Entry также принимает параметры relief и state для изменения стиля контура и состояния. Также стоит отметить, что вызовы delete() и insert() игнорируются, когда состояние равно «disabled» или «readonly».
Отслеживание изменений текста
Эта особенность особенно полезна в том случае, если нужно автоматически обновить отдельные части приложения на основе текущего состояния виджетов.
Как отслеживать изменения текста
Как работает изменение текста
Первые строки конструктора приложения создают экземпляр StringVar и прикрепляют функцию обратного вызова для режима записи. Валидные значения этого режима:
При вызове функция обратного вызова получает три аргумента: внутреннее имя переменной, пустую строку (она используется в других типах переменных Tk ) и режим, который запустил операцию. При объявлении его с *args эти аргументы становятся опциональными, потому что при обратном вызове значения уже не используются.
Валидация текста в полях
Чаще всего поля для ввода текста представляют собой поля, которые следуют определенным правилам валидации, например, максимальная длина или определенный формат. Некоторые приложения предоставляют возможность ввода содержимого любого вида и выполняют валидацию уже после того как вся форма целиком была отправлена.
При определенных условиях нужно предотвратить возможность ввода невалидного содержимого в поле текста. Следующие примеры рассмотрят, как реализовать такое поведение с помощью параметров валидации в виджете Entry.
Как валидировать текст
Следующее приложение демонстрирует, как валидировать текст в поле ввода с помощью регулярных выражений:
Если запустить этот скрипт и ввести не букву алфавита или цифру, то содержимое не изменится, а вместо этого будет выведено сообщение об ошибке в консоль. Это же будет происходить, если попытаться ввести больше 10 символов, поскольку регулярное выражение ограничивает общее количество.
Как работает валидация текста
vcmd = (self.register(self.validate_username), «%i», «%P»)
Можно использовать следующие замещения:
Как очистить холст Tkinter?
Когда я рисую форму, используя:
Отслеживает ли Tkinter тот факт, что он был создан?
В простой игре, которую я создаю, в моем коде один Frame создает группу прямоугольников, затем рисует большой черный прямоугольник, чтобы очистить экран, а затем рисует другой набор обновленных прямоугольников и так далее.
Я создаю тысячи прямоугольных объектов в памяти?
Я знаю, что вы можете присвоить приведенный выше код переменной, но если я не сделаю этого и просто начертлю непосредственно на холсте, он останется в памяти или просто прорисует пиксели, как на холсте HTML5?
3 ответа
Чтобы очистить холст, используйте метод delete. Задайте ему специальный параметр «all» для удаления всех элементов на холсте (строка «all» «является специальным тегом, который представляет все элементы на холсте):
Если вы хотите удалить только определенные элементы на холсте (например, объекты переднего плана, оставив фоновые объекты на дисплее), вы можете назначить теги каждому элементу. Затем вместо «all» вы можете указать имя тега.
Если вы создаете игру, вам, вероятно, не нужно удалять и воссоздавать предметы. Например, если у вас есть объект, который перемещается по экрану, вы можете использовать move или координат для перемещения элемента.
Да, я верю, что вы создаете тысячи объектов. Если вы ищете простой способ удалить сразу несколько из них, используйте теги canvas описан здесь. Это позволяет выполнять одну и ту же операцию (например, удаление) с большим количеством объектов.
Элементы, нарисованные на холсте, являются постоянными. create_rectangle возвращает идентификатор элемента, который вы должны отслеживать. Если вы не удалите старые элементы, ваша программа в конечном итоге замедлится.
Курс по библиотеке Tkinter языка Python
Содержание
Введение
Этой библиотеке посвящено мало внимания, и найти в рунете курс, книгу или FAQ по ней довольно-таки сложно. Стоит отметить, что здесь отражены только основы этой библиотеки, и надеюсь, что более опытные люди дополнят эту статью.
Что такое Tkinter?
Так как Tkinter является достаточно прозрачным интерфейсом к tcl/tk, то основным источником информации для неё являются man-страницы tcl/tk. Эти страницы имеются в любой Unix-системе (в разделе n или 3tk). Также они доступны онлайн на сайте http://tcl.tk. Основные:
Начиная с версии python-3.0 библиотека переименована в соответствии с PEP 8 в tkinter (с маленькой буквы).
Импортируется она как и любая другая библиотека:
Класс Tk
Tk является базовым классом любого Tkinter приложения. При создании объекта этого класса запускается интерпретатор tcl/tk и создаётся базовое окно приложения.
Tkinter является событийно-ориентированной библиотекой. В приложениях такого типа имеется главный цикл обработки событий. В Tkinter такой цикл запускается методом mainloop. Для явного выхода из интерпретатора и завершения цикла обработки событий используется метод quit.
Таким образом минимальное приложение на Tkinter будет таким:
В приложении можно использовать несколько интерпретаторов tcl/tk. Так как после вызова метода mainloop дальнейшие команды python исполняться не будут до выхода из цикла обработки событий, необходимо метод mainloop всех интерпретаторов кроме последнего осуществлять в фоновом режиме. Пример запуска двух интерпретаторов:
При использовании двух и более интерпретаторов необходимо следить, чтобы объекты, созданные в одном интерпретаторе, использовались только в нём. Например, изображение, созданное в первом интерпретаторе, может быть использовано много раз в этом же интерпретаторе, но не может быть использовано в других интерпретаторах. Необходимость в запуске нескольких интерпретаторов в одном приложении возникает крайне редко. Для создания дополнительного окна приложения в большинстве случаев достаточно виджета Toplevel.
Общее для всех виджетов
Все виджеты в Tkinter обладают некоторыми общими свойствами. Опишем их, перед тем как перейти к рассмотрению конкретных виджетов. Виджеты создаются вызовом конструктора соответствующего класса. Первый аргумент (как правило неименованный, но можно использовать имя master) это родительский виджет, в который будет упакован (помещён) наш виджет. Родительский виджет можно не указывать, в таком случае будет использовано главное окно приложения. Далее следуют именованные аргументы, конфигурирующие виджет. Это может быть используемый шрифт (font=. ), цвет виджета (bg=. ), команда, выполняющаяся при активации виджета (command=. ) и т.д. Полный список всех аргументов можно посмотреть в man options и man-странице соответствующего виджета (например man button, см. разделы «STANDARD OPTIONS» и «WIDGET-SPECIFIC OPTIONS»). Пример кода:
Памятуя о Zen Python (явное лучше неявного) указываю: данный код написан и работает для Python v 2. В случае использования Python v 3 код немного изменится. 1. tkinter с маленькой буквы. 2. print в круглых скобках () и без u.
Методы виджетов
Виджеты могут быть сконфигурированы во время создания, но иногда необходимо изменить конфигурацию виджета во время исполнения программы. Для этого используется метод configure (или его синоним config). Также можно использовать квадратные скобки (widget[‘option’] = new_value). Пример, программа выводит текущее время, после клика по кнопке:
В этом коде функция button_clicked вызывается каждый раз, когда пользователь кликает по кнопке.
Метод cget является обратным к методу configure. Он предназначен для получения информации о конфигурации виджета. Здесь как и в случае с configure можно использовать квадратные скобки (value = widget[‘option’]). Пример, после клика на кнопку программа показывает цвет кнопки и меняет его на другой:
Уничтожение виджета и всех его потомков. Стоит отметить, что если необходимо только на время спрятать какой-либо виджет, то лучше пользоваться упаковщиком grid и методом grid_remove:
Использование grid_remove позволяет сохранять взаимное расположение виджетов.
Методы семейства grab_ предназначены для управления потоком события. Виджет, захвативший поток, будет получать все события окна или приложения.
Пример, приложение захватывает глобальный поток и освобождает его через 10 секунд:
Методы семейства focus_ используются для управления фокусом ввода с клавиатуры. Виджет, имеющий фокус, получает все события с клавиатуры.
«Системные» методы
Эти методы не являются виджет-специфичными, т.е. хотя они являются методами виджетов они влияют на работу интерпретатора tcl/tk.
after, after_idle и after_cancel [3]
Таймеры. С помощью этих методов вы можете отложить выполнение какого-нибудь кода на определённое время.
update и update_idletasks [4]
Две функции, для работы с очередью задач. Их выполнение вызывает обработку отложенных задач.
update_idletasks выполняет задачи, обычно откладываемые «на потом», когда приложение будет простаивать. Это приводит к прорисовке всех виджетов, расчёту их расположения и т.д. Обычно эта функция используется если были внесены изменения в состояние приложения, и вы хотите, чтобы эти изменения были отображены на экране немедленно, не дожидаясь завершения сценария.
update обрабатывает все задачи, стоящие в очереди. Обычно эта функция используется во время «тяжёлых» расчётов, когда необходимо чтобы приложение оставалось отзывчивым на действия пользователя.
eval и evalfile
Основные виджеты
Toplevel
Эти же методы могут быть использованы для корневого (root) окна.
Таким способом можно предотвратить закрытие окна (например, если закрытие окна приведёт к потере введённых пользователем данных).
Button
Далее, нашу кнопку необходимо разместить на окне. Для этого, в Tkinter используются специальные упаковщики( pack(), place(), grid() ). Поподробнее об упаковщиках узнаем позже. Пока, чтобы разместить несколько виджетов на окне, будем применять самый простой упаковщик pack(). В конце программы, нужно использовать функцию mainloop (см. пример), иначе окно не будет создано.
Label
Entry
Listbox
Стоит заметить, что в этой библиотеке для того, чтобы использовать русские буквы в строках, нужно использовать Unicode-строки. В Python 2.x для этого нужно перед строкой поставить букву u, в Python 3.x этого делать вообще не требуется, т.к. все строки в нем изначально Unicode. Кроме того в первой или второй строке файла необходимо указать кодировку файла (в комментарии): coding: utf-8. Чаще всего используется формат в стиле текстового редактора emacs:
В Python 3.x кодировку файла можно не указывать, в этом случае по умолчанию предполагается utf-8.
Frame
Виджет Frame (рамка) предназначен для организации виджетов внутри окна. Рассмотрим пример:
Свойство bd отвечает за толщину края рамки.
Checkbutton
Radiobutton
Виджет Radiobutton выполняет функцию, схожую с функцией виджета Checkbutton. Разница в том, что в виджете Radiobutton пользователь может выбрать лишь один из пунктов. Реализация этого виджета несколько иная, чем виджета Checkbutton:
В этом виджете используется уже одна переменная. В зависимости от того, какой пункт выбран, она меняет своё значение. Самое интересное, что если присвоить этой переменной какое-либо значение, поменяется и выбранный виджет. На этом мы прервём изучение типов виджетов (потом мы к ним обязательно вернёмся).
Scale
Здесь используется специальный метод get(), который позволяет снять с виджета определенное значение, и используется не только в Scale.
Scrollbar
Этот виджет даёт возможность пользователю «прокрутить» другой виджет (например текстовое поле) и часто бывает полезен. Использование этого виджета достаточно нетривиально. Необходимо сделать две привязки: command полосы прокрутки привязываем к методу xview/yview виджета, а xscrollcommand/yscrollcommand виджета привязываем к методу set полосы прокрутки.
Рассмотрим на примере:
Упаковщики
Упаковщик (менеджер геометрии, менеджер расположения) это специальный механизм, который размещает (упаковывает) виджеты на окне. В Tkinter есть три упаковщика: pack, place, grid. Обратите внимание, что в одном виджете можно использовать только один тип упаковки, при смешивании разных типов упаковки программа, скорее всего, не будет работать.
Разберем каждый из них по порядку:
pack() [6]
Упаковщик pack() является самым интеллектуальным (и самым непредсказуемым). При использовании этого упаковщика с помощью свойства side нужно указать к какой стороне родительского виджета он должен примыкать. Как правило этот упаковщик используют для размещения виджетов друг за другом (слева направо или сверху вниз). Пример:
Результат работы можно увидеть на скриншоте справа.
Для создания сложной структуры с использованием этого упаковщика обычно используют Frame, вложенные друг в друга.
При применении этого упаковщика можно указать следующие аргументы:
Кроме основной функции у виджетов есть дополнительные методы для работы с упаковщиками.
grid() [8]
Этот упаковщик представляет собой таблицу с ячейками, в которые помещаются виджеты.
Для каждого виджета указываем, в какой он находится строке, и в каком столбце. Если нужно, указываем, сколько ячеек он занимает (если, например, нам нужно разместить три виджета под одним, необходимо «растянуть» верхний на три ячейки). Пример:
Пример, текстовый виджет с двумя полосами прокрутки:
place() [10]
place представляет собой простой упаковщик, позволяющий размещать виджет в фиксированном месте с фиксированным размером. Также он позволяет указывать координаты размещения в относительных единицах для реализации «резинового» размещения. При использовании этого упаковщика, нам необходимо указывать координаты каждого виджета. Например:
Этот упаковщик, хоть и кажется неудобным, предоставляет полную свободу в размещении виджетов на окне.
Привязка событий
command
Для большинства виджетов, реагирующих на действие пользователя, активацию виджета (например нажатие кнопки) можно привязать с использованием опции command. К таким виджетам относятся: Button, Checkbutton, Radiobutton, Spinbox, Scrollbar, Scale. Выше мы уже неоднократно пользовались этим способом:
Такой способ является предпочтительным и наиболее удобным способом привязки.
Метод bind[1] привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:
Метод bind возвращает идентификатор привязки, который может быть использован в функции unbind.
Обратите внимание, что если bind привязан к окну верхнего уровня, то Tkinter будет обрабатывать события всех виджетов этого окна (см. также bind_all ниже).
Функция, которая вызывается при наступлении события, должна принимать один аргумент. Это объект класса Event, в котором описано наступившее событие. Объект класса Event имеет следующие атрибуты (в скобках указаны события, для которых этот атрибут установлен):
Есть три формы названия событий. Самый простой случай это символ ASCII. Так описываются события нажатия клавиш на клавиатуре:
callback вызывается каждый раз, когда будет нажата клавиша «z».
Второй способ длиннее, но позволяет описать больше событий. Он имеет следующий синтаксис:
Название события заключено в угловые скобки. Внутри имеются ноль или более модификаторов, тип события и дополнительная информация (номер нажатой клавиши мыши или символ клавиатуры) Поля разделяются дефисом или пробелом. Пример (привязываем одновременное нажатие Ctrl+Shift+q):
(в данном примере KeyPress можно убрать).
Здесь перечислены все возможные типы событий, для самых часто используемых дано описание. Более подробно см. man bind.
- движение мышью с нажатой на клавиатуре клавишей Alt.
- нажатие любой клавиши на клавиатуре.
Пример, меняем порядок обработки привязок на обратный:
Изображения
BitmapImage
Конструктор класса принимает следующие аргументы:
PhotoImage
PhotoImage позволяет использовать полноцветное изображение. Кроме того у этого класса есть несколько (достаточно примитивных) методов для работы с изображениями. PhotoImage гарантированно понимает формат GIF.
ttk (themed tk) это расширение tcl/tk с новым набором виджетов. В ttk используется новый движок для создания виджетов. Этот движок обладает поддержкой тем и стилей оформления. Благодаря этому виджеты ttk выглядят более естественно в различных операционных системах.
Начиная с версий python 2.7 и 3.1.2 в Tkinter включён модуль для работы с ttk.
В ttk включены следующие виджеты, которые можно использовать вместо соответствующих виджетов tk: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale и Scrollbar. Кроме того имеется несколько новых виджетов: Combobox, Notebook, Progressbar, Separator, Sizegrip и Treeview.
С точки зрения программиста главное отличие новых виджетов от старых заключается в том, что у виджетов ttk отсутствуют опции для конфигурирования его внешнего вида. Сравните, например, количество STANDARD OPTIONS для старого и нового виджета button. Конфигурация внешнего вида виджетов ttk осуществляется через темы и стили. В остальном использование виджетов ttk аналогично соответствующим виджетам tk.
Style
Style это класс для работы со стилями и темами. Именно этот класс надо использовать для конфигурирования внешнего вида виджетов. Основные методы класса:
Конфигурирование внешнего вида виджетов. В качестве аргументов принимает название стиля виджета (например "TButton") и список опций конфигурирования. Пример:
Конфигурирование внешнего вида виджетов в зависимости от их состояний (active, pressed, disabled и т.д.). В качестве аргументов принимает название стиля виджета и список опций конфигурирования, где опции представлены в виде списка. Пример:
Возвращает соответствующую опцию конфигурирования. Пример:
Изменяет layout (схему) виджета. Виджеты ttk состоят из отдельных элементов, опций конфигурирования и других вложенных layouts. Следующий пример иллюстрирует применение метода layout:
Создаёт новый элемент темы.
Возвращает список элементов текущей темы.
Возвращает список опций (конфигурацию), указанного в аргументе элемента.
Создаёт новую тему. Аргументы те же, что и в theme_settings.
Возвращает список доступных тем.
Изменяет текущую тему на указанную в аргументе.
Combobox
Виджет Combobox предназначен для отображения списка значений, их выбора или изменения пользователем. В версии tk ему подобен виджет Listbox. Разница заключается в том, что Combobox имеет возможность сворачиваться подобно свитку, а Listbox будет отображаться всегда открытым. Что бы отобразить Combobox с заранее заданными значениями в форме, достаточно сделать следующее:
Progressbar
Виджет отображает уровень загрузки.
Запускает бесконечный цикл загрузки. Шаг длиною 1 выполняется один раз в указанное время (в миллисекундах).
Останавливает цикл загрузки.
Продвигает загрузку на заданное количество шагов.




