Как удалить 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
Для полного удаления виджета можно использовать метод destroy , пример:
def on_press(): b.destroy() b = Button(w, command=on_press)
После нажатия кнопка удалится полностью (т.е. с ней больше нельзя будет ничего сделать: например, при попытке разместить ее повторно будет ошибка).
Если виджет нужно временно удалить из окна с возможностью потом вернуть, то используйте следующие методы:
- Методы .grid_forget , .pack_forget (он же просто .forget ), .place_forget удаляют виджет из окна, но виджет продолжает сущестовать, его можно снова разместить в окне.
- Метод .grid_remove позволяет скрыть виджет, и потом вернуть его обратно с теми же параметрами и в то же место (в ту же строку и колонку сетки) просто вызовом .grid() без параметров.
Как удалить виджет label при повторном нажатии на кнопку?
К кнопке привязана функция ft(), ее задача заключается в выводе введенного числа и при повторном вызове функции предыдущий элемент label должен удаляться. Все было бы хорошо, если бы не ошибка "local variable 'kh' referenced before assignment", не понимаю из-за чего выходит ошибка, ведь переменная kh существует как и ее значение 0
from tkinter import* kh = 0 def ft(): label_data = Label(root,text = 'Введенное число %s') label_data.pack() if kh == 1: kh = 0 label_data.destroy() else: kh += 1
- Вопрос задан более двух лет назад
- 446 просмотров
Python-сообщество
![]()
- Начало
- » GUI
- » Подскажите, как удалить Label в Tkinter?
#1 Янв. 14, 2017 17:22:51
Franek От: Беларусь Зарегистрирован: 2016-05-09 Сообщения: 66 Репутация: 0 Профиль Отправить e-mail
Подскажите, как удалить Label в Tkinter?
Python 3.5, Tkinter.
Подскажите, пожалуйста. Когда на метке (Label) появляется текстовая надпись 2-ой раз, то она накладывается на предыдущую надпись. Как очистить метку?
В Викиверситете ответа не нашёл.
# Создание программы для изучения английских непр. глаголов from tkinter import * class Application(Frame): spis = [("воровать", "steal", "stole", "stolen"), ("кусать", "bite", "bit", "bitten"), ("делать", "do", "did", "done")] i = 0 j = 0 def __init__(self, master): super(Application, self).__init__(master) self.grid() self.create_widgets() def create_widgets(self): cort = self.spis[self.j] lbl = Label(text=cort[0], fg="green", font='arial 14') lbl.grid(row=0, column=2) btn = Button(width=15, text="перевод", command=self.transl) btn.grid() def transl(self): cort = self.spis[self.j] ruslbl = Label(text=cort[0], fg="green", font='arial 14') # Russian word ruslbl.grid(row=0, column=1, columnspan=3) self.i += 1 englbl = Label(text=cort[self.i], font='arial 15') # English word englbl.grid(row=self.i+1, column=1, columnspan=3) if self.i == 3: self.i = 0 self.j += 1 root = Tk() root.title("Программа изучения английских слов") root.geometry("400x150") app = Application(root) root.mainloop()
Отредактировано Franek (Янв. 14, 2017 17:41:41)
#2 Янв. 14, 2017 17:48:01
4kpt_IV Зарегистрирован: 2016-01-08 Сообщения: 999 Репутация: 49 Профиль Отправить e-mail
Подскажите, как удалить Label в Tkinter?
Не создавать новый лейб, а просто в старом поменять свойство text
label["text"] = "new text"
Отредактировано 4kpt_IV (Янв. 14, 2017 17:48:34)
#3 Янв. 14, 2017 18:24:05
Franek От: Беларусь Зарегистрирован: 2016-05-09 Сообщения: 66 Репутация: 0 Профиль Отправить e-mail
Подскажите, как удалить Label в Tkinter?
4kpt_IV
Спасибо!! Думал никак не решу.
# Создание программы для изучения английских непр. глаголов from tkinter import * class Application(Frame): spis = [("воровать", "steal", "stole", "stolen"), ("кусать", "bite", "bit", "bitten"), ("делать", "do", "did", "done")] i = 0 j = 0 def __init__(self, master): super(Application, self).__init__(master) self.grid() self.create_widgets() def create_widgets(self): cort = self.spis[self.j] ruslbl = Label(text=cort[0], fg="green", font='arial 14') # Russian word self.ruslbl = ruslbl ruslbl.grid(row=0, column=2) englbl = Label(text=cort[self.i+1], font='arial 15') # English word self.englbl = englbl englbl.grid(row=self.i + 1, column=1, columnspan=3) btn = Button(width=15, text="перевод", command=self.transl) btn.grid() def transl(self): self.i += 1 cort = self.spis[self.j] self.ruslbl["text"] = cort[0] self.englbl["text"] = cort[self.i] if self.i == 3: self.i = 0 self.j += 1 root = Tk() root.title("Программа изучения английских слов") root.geometry("400x150") app = Application(root) root.mainloop()
#4 Янв. 16, 2017 09:37:46
Franek От: Беларусь Зарегистрирован: 2016-05-09 Сообщения: 66 Репутация: 0 Профиль Отправить e-mail
Подскажите, как удалить Label в Tkinter?
4kpt_IV
Почему текст на лейбе появляется строго в одной строке? Упаковщик grid работает когда нажимаешь кнопку Button, в нём расположение строк должны меняться (переменная i). Но текст размещается строго в одной строке.
Полный текст проги:
from tkinter import * class Application(Frame): spis = [("воровать", "steal", "stole", "stolen"), ("кусать", "bite", "bit", "bitten"), ("делать", "do", "did", "done")] i = 0 j = 0 def __init__(self, master): super(Application, self).__init__(master) self.grid() self.create_widgets() def create_widgets(self): cort = self.spis[self.j] ruslbl = Label(text=cort[0], fg="green", font='arial 14') # Russian word self.ruslbl = ruslbl ruslbl.grid(row=0, column=3) englbl = Label(font='arial 15') # English word self.englbl = englbl btn = Button(width=15, text="перевод", command=self.transl) btn.grid(column=2) def transl(self): self.i += 1 print("i = ", self.i) cort = self.spis[self.j] self.ruslbl["text"] = cort[0] self.englbl["text"] = cort[self.i] self.englbl.grid(row=self.i + 1, column=2) if self.i == 3: self.j += 1 print("j = ", self.j) self.i = 0 root = Tk() root.title("Программа изучения английских слов") root.geometry("400x150") app = Application(root) root.mainloop()