Как удалить label python tkinter
Для добавления текста применяется метод insert() :
insert(index, chars)
Первый параметр представляет позицию вставки в формате «line.column» — сначала идет номер строки, а затем номер символа. Второй параметр — собственно вставляемый текст. Например, вставка в начало:
editor.insert("1.0", "Hello")
Для вставки в конец для позиции передается значение END :
from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x200") editor = Text() editor.pack(fill=BOTH, expand=1) editor.insert("1.0", "Hello World") # вставка в начало editor.insert(END, "\nBye World") # вставка в конец root.mainloop()

Получение текста
Для получения введенного текста применяется метод get() :
get(start, end)
Параметр start указывает на начальный символ, а end — на конечный символ, текст между которыми надо получить. Оба параметра в формате «line.colunm», где line — номер строки, а «column» — номер символа. Для указания последнего символа применяется константа END:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x200") editor = Text(height=5) editor.pack(anchor=N, fill=X) label=ttk.Label() label.pack(anchor=N, fill=BOTH) def get_text(): label["text"] = editor.get("1.0", "end") button = ttk.Button(text="Click", command=get_text) button.pack(side=BOTTOM) root.mainloop()
В данном случае по нажатию на кнопку срабатывает функция get_text() , которая получает текст и передается его для отображения в метку label:

Удаление текста
Для удаления текста применяется метод delete()
delete(start, end)
Параметр start указывает на начальный символ, а end — на конечный символ, текст между которыми надо удалить. Оба параметра в формате «line.colunm», где line — номер строки, а «column» — номер символа. Для указания последнего символа применяется константа END. Например, определим кнопку, которая будет удалять весь текст из виджета:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x200") editor = Text(height=10) editor.pack(anchor=N, fill=BOTH) def delete_text(): editor.delete("1.0", END) button = ttk.Button(text="Clear", command=delete_text) button.pack(side=BOTTOM) root.mainloop()
Замена текста
Для замены текста применяется метод replace() :
replace(start, end, chars)
Параметр start указывает на начальный символ, а end — на конечный символ, текст между которыми надо заменить. Оба параметра в формате «line.colunm», где line — номер строки, а «column» — номер символа. Для указания последнего символа применяется константа END. Последний параметр — chars — строка, на которую надо заменить. Например, замена первых четырех символов на строку «дама»:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x200") editor = Text(height=10) editor.pack(anchor=N, fill=BOTH) editor.insert("1.0", "мама мыла раму") def edit_text(): editor.replace("1.0", "1.4", "дама") button = ttk.Button(text="Replace", command=edit_text) button.pack(side=BOTTOM) root.mainloop()

Повтор и отмена операций
Методы edit_undo() и edit_redo() позволяют соответственно отменить и повторить операцию (добавление, изменение, удаление текста). Данные методы применяются, если в виджете Text параметр undo равен True. Стоит отметить, что данные методы оперируют своим стеком операций, в котором сохраняются данные операций. Однако если стек для соответствующего метода пуст, то вызов метода вызывает исключение. Простейший пример, где по нажатию на кнопку вызывается отмена или возврат операции:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") root.grid_columnconfigure(0, weight = 1) root.grid_columnconfigure(1, weight = 1) root.grid_rowconfigure(0, weight = 1) editor = Text(undo=True) editor.grid(column = 0, columnspan=2, row = 0, sticky = NSEW) def undo(): editor.edit_undo() def redo(): editor.edit_redo() redo_button = ttk.Button(text="Undo", command=undo) redo_button.grid(column=0, row=1) clear_button = ttk.Button(text="Redo", command=redo) clear_button.grid(column=1, row=1) root.mainloop()
Выделение текста
Для управления выделением текста виджет Text обладает следующими методами:
- selection_get() : возвращает выделенный фрагмент
- selection_clear() : снимает выделение
Применим данные методы:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def get_selection(): label["text"]=editor.selection_get() def clear_selection(): editor.selection_clear() editor = Text(height=5) editor.pack(fill=X) label = ttk.Label() label.pack(anchor=NW) get_button = ttk.Button(text="Get selection", command=get_selection) get_button.pack(side=LEFT) clear_button = ttk.Button(text="Clear", command=clear_selection) clear_button.pack(side=RIGHT) root.mainloop()
В данном случае по нажатию на кнопку get_button срабатывает функция get_selection, которая передает в метку label выделенный текст. При нажатии на кнопку clear_button срабатывает функция clear_selection, которая снимает выделение.
События
Достаточно часто встречает необходимость обработки ввода текста. Для виджета Text определено событие > , которое срабатывает при изменении текста в текстовом поле. Однако оно срабатывает один раз. И в этом случае мы можем обработать стандартные события клавиатуры. Например, событие освобождения клавиши :
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def on_modified(event): label["text"]=editor.get("1.0", END) editor = Text(height=8) editor.pack(fill=X) editor.bind("", on_modified) label = ttk.Label() label.pack(anchor=NW) root.mainloop()
В данном случае при освобождении клавиши будет срабатывать функция on_modified , в которой метке label передается весь введенный текст:

Другую распространенную задачу представляет динамическое получение выделенного текста. В этом случае мы можем обработать событие > . Например, при выделении текста выведем выделенный фрагмент в метку Label:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def on_modified(event): label["text"]=editor.selection_get() editor = Text(height=8) editor.pack(fill=X) editor.bind(">", on_modified) label = ttk.Label() label.pack(anchor=NW) root.mainloop()
Как удалить label python tkinter
Для удаления применяется метод delete() , который в качестве параметра принимает идентификатор удаляемого элемента.
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) def remove_button(): canvas.delete(btnId) btn = ttk.Button(text="Click", command=remove_button) btnId = canvas.create_window(10, 20, anchor=NW, window=btn, width=100, height=50) root.mainloop()
Здесь по нажатию на кнопку удаляется сама кнопка. В качестве аргумента в метод delete() передается идентификатор, который мы получаем при добавлении кнопки.
Управление координатами
Для получения/изменения координат элеимента применяется метод coords() :
# получение координат coords(__tagOrId: str | _CanvasItemId, /) -> list[float] # изменение координат coords(__tagOrId: str | _CanvasItemId, __args: list[int] | list[float] | tuple[float, . ], /) -> None coords(__tagOrId: str | _CanvasItemId, __x1: float, __y1: float, *args: float) -> None
Первая версия возвращает координаты в виде списка значений для элемента с определенным идентификатором.
Вторая и третья версии изменяют позицию, получая в качестве второго/третьего параметра(ов) новые координаты.
Например, динамически изменим координаты:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") y = 0 direction = -10 btn_height = 40 canvas_height = 200 canvas = Canvas(bg="white", width=250, height=canvas_height) canvas.pack(anchor=CENTER, expand=1) def cliked_button(): global y, direction if y >= canvas_height - btn_height or y
Здесь по нажатию на кнопку к координате y добавляется +-10. Когда кнопка достигает границ Canvas, то изменяем знак приращения на противоположный, и таким образом, кнопка изменяет направление движения.
Изменение параметров элемента
Для изменения параметров элемента на Canvas применяется метод itemconfigure() . В качестве обязательного параметра он принимает идентифкатор изменяемого элемента, а второй параметр - набор устанавливаемых параметров:
itemconfigure: (tagOrId: str | _CanvasItemId, cnf: dict[str, Any] | None = . **kw: Any)
Например, изменим цвет линии:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") red = "red" blue= "blue" selected_color = StringVar(value=red) canvas = Canvas(bg="white", width=250, height=150) canvas.pack(anchor=CENTER, expand=1) def select(): canvas.itemconfigure(line, fill=selected_color.get()) red_btn = ttk.Radiobutton(text=red, value=red, variable=selected_color, command=select, padding=6) red_btn.pack(anchor=NW) blue_btn = ttk.Radiobutton(text=blue, value=blue, variable=selected_color, command=select, padding=6) blue_btn.pack(anchor=NW) line = canvas.create_line(10, 10, 200, 100, fill=selected_color.get()) root.mainloop()
В данном случае в окне определены два переключателя Radiobutton. Они привязаны к переменной selected_color, которая хранит выбранный цвет - "red" или "blue".
На canvas нарисована линия. При нажатии на один из переключателей изменяем цвет линии:
Как очистить поле ввода в Tkinter?
Здравствуйте, нужна помощь. Изучаю Python и решил написать небольшую программу, чтобы немного разобраться во всем.
- Получать данные от пользователя и вносить их в файл.
- При запросе пользователя прочитать файл и вывести данные в табличном виде.
- Удалить ненужные данные (ошибка или потеря актуальности).
Изначально попробовал написать чисто консольный скрипт, теперь хочу добавить немного "красивостей". Использую для этого Tkinter.
На данном этапе готова функция с получением данных и записью в файл. Также есть функция прочтения и вывода в табличной форме (только в консоли, пока не придумал как их вывести в окно программы). Сейчас это весь готовый функционал.
Проблема заключается в следующем: пользователь вводит данные, нажимает кнопку, всё отлично записывается и выскакивает уведомление, дальше нужно очистить поля и ждать следующего действия пользователя.
Почитал про то, как можно очистить поле ввода, перепробовал несколько вариантов, но не один не сработал. Кто может подсказать как это исправить?
Если будут какие-то замечания по коду, пишите в комментариях.
from tkinter import * from tkinter import messagebox import pandas as pd import os def clear (): NameUserEntry.delete("0", END) NumbersEntry.delete("0", END) CarEntry.delete("0", END) VolumeSEntry.delete("0", END) PriceSEntry.delete("0", END) VolumeFEntry.delete("0", END) PriceFEntry.delete("0", END) ExpensesEntry.delete("0", END) def data_user(): os.system('CLS') print("Получение данных. ", end="") name_driver = NameUserEntry.get() number_driver = NumbersEntry.get() car_driver = CarEntry.get() volume_start = int(VolumeSEntry.get()) price_start = int(PriceSEntry.get()) volume_finish = int(VolumeFEntry.get()) price_finish = int(PriceFEntry.get()) expenses = int(ExpensesEntry.get()) profit = volume_finish * price_finish - volume_start * price_start - expenses print('Ок') os.system('CLS') print("Формируется словарь. ", end="") data_driver = < 'name':name_driver, 'numbers':number_driver, 'car':car_driver, 'Vs':volume_start, 'Ps':price_start, 'Vf':volume_finish, 'Pf':price_finish, 'Ex':expenses, 'Prof':profit, >print("Ок") print("Собираем фрейм. ", end="") columns = ['ФИО', 'Телефон', 'Машина', 'Объем на старте', 'Цена покупки', 'Объем на выходе', 'Цена продажи', 'Затраты', 'Профит',] data = [[data_driver['name'], data_driver['numbers'], data_driver['car'], data_driver['Vs'], data_driver['Ps'], data_driver['Vf'], data_driver['Pf'], data_driver['Ex'], data_driver['Prof'] ]] df = pd.DataFrame(data, columns=columns) print('Ок') print('Делаем запись. ', end='') df.to_csv(r'data.csv', mode='a', sep='/', header=False, index=False, encoding='utf-8') print('Ок') positive = 'Запись успешно добалена!' messagebox.showinfo('Уведомление', positive) def read_data(): df =pd.read_csv(r'data.csv', sep='/', names = ['ФИО', 'Телефон', 'Машина', 'Объем на старте', 'Цена покупки', 'Объем на выходе', 'Цена продажи', 'Затраты', 'Профит']) print(df) root = Tk() root.title('F1') root.geometry('500x600') button_padding = header_padding = #ФИО водителя NameUserLabel = Label(root, text='ФИО водителя: ', **header_padding) NameUserLabel.grid(row = 1, rowspan=1, column=1, sticky='w') NameUserEntry = Entry(root, bg='#fff', fg='#444') NameUserEntry.grid(row = 2, rowspan=1, column=1,sticky='w') #Номер телефона NumbersLabel = Label(root, text='Номер телефона: ') NumbersLabel.grid(row = 1, rowspan=1, column=3, sticky='w') NumbersEntry = Entry(root, bg='#fff', fg='#444') NumbersEntry.grid(row = 2, rowspan=1, column=3,sticky='w') #марка машины, номер CarLabel = Label(root, text='Машина(марка,г.с.з.: ', **header_padding) CarLabel.grid(row = 3, rowspan=1, column=1, sticky='w') CarEntry = Entry(root, bg='#fff', fg='#444') CarEntry.grid(row = 4, rowspan=1, column=1,sticky='w') #объем при покупке VolumeSLabel = Label(root, text='Объем (покупка): ', **header_padding) VolumeSLabel.grid(row = 6, rowspan=1, column=1, sticky='w') VolumeSEntry = Entry(root, bg='#fff', fg='#444') VolumeSEntry.grid(row = 7, rowspan=1, column=1,sticky='w') #цена покупки PriceSLabel = Label(root, text='Цена (покупка): ') PriceSLabel.grid(row = 6, rowspan=1, column=3, sticky='w') PriceSEntry = Entry(root, bg='#fff', fg='#444') PriceSEntry.grid(row = 7, rowspan=1, column=3,sticky='w') #объем при продаже VolumeFLabel = Label(root, text='Объем (продажа): ', **header_padding) VolumeFLabel.grid(row = 9, rowspan=1, column=1, sticky='w') VolumeFEntry = Entry(root, bg='#fff', fg='#444') VolumeFEntry.grid(row = 10, rowspan=1, column=1,sticky='w') #цена при продаже PriceFLabel = Label(root, text='Цена (продажа): ') PriceFLabel.grid(row = 9, rowspan=1, column=3, sticky='w',) PriceFEntry = Entry(root, bg='#fff', fg='#444') PriceFEntry.grid(row = 10, rowspan=1, column=3,sticky='w') #прочие затраты ExpensesLabel = Label(root, text='Прочие затраты: ', **header_padding) ExpensesLabel.grid(row = 12, rowspan=1, column=1, sticky='w') ExpensesEntry = Entry(root, bg='#fff', fg='#444', ) ExpensesEntry.grid(row = 13, rowspan=1, column=1,sticky='w') #профит, высчитывается и вносится в таблицу # кнопка сделать запись ButtonWrite = Button(root, text='Сделать запись', bg='#fff', fg='#444') ButtonWrite.grid(row = 15, rowspan=1, column=1, sticky='ws') ButtonWrite.config(command=data_user) # кнопка очистки данных ButtonDelete = Button(root, text='очистить данные', bg='#fff', fg='#444') ButtonDelete.grid(row = 15, rowspan=1, column=3, sticky='w') ButtonDelete.config(command=clear) root.mainloop()
- Вопрос задан более двух лет назад
- 6014 просмотров
Удалить созданный label tkinter
Я хочу создавать таблицу на основе пришедших данных. Для этого я создал функцию add_label, но как мне потом удалить их?
import tkinter as tk def add_label(): label = tk.Label(app, text='NewLabel').grid() def destroy_label(): label.destroy() app = tk.Tk() app.geometry("400x400+10+10") btn4 = tk.Button(app, text="ADD LABEL", command=add_label).grid(row=5, column=0) btn5 = tk.Button(app, text="Destroy Labels", command=destroy_label).grid(row=6, column=0) app.mainloop()
Отслеживать
задан 17 сен 2021 в 0:58
119 9 9 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В принципе у вас почти всё верно. Только упущен один нюанс - переменную label надо было объявить глобальной, чтобы иметь возможность передавать её между функциями. Ну и если их у вас много, то это должен быть, к примеру, список.
labels_list = [] def add_label(): global labels_list label = tk.Label(app, text='NewLabel') label.grid() labels_list.append(label) def destroy_label(): if labels_list: # удалить последнюю labels_list.pop().destroy() # for label in labels_list: # удалить все # label.destroy() # labels_list = []
По два Label в ряд за раз:
labels_list = [] def add_label(): global labels_list row = 7 + len(labels_list)//2 label = tk.Label(app, text='NewLabel') label.grid(row=row, column=0) labels_list.append(label) label = tk.Label(app, text='NewLabel') label.grid(row=row, column=1) labels_list.append(label) def destroy_label(): if labels_list: # удалить последние две labels_list.pop().destroy() labels_list.pop().destroy()