Как удалить кнопку в tkinter python
Перейти к содержимому

Как удалить кнопку в tkinter python

  • автор:

Как удалить кнопку в tkinter python

Для удаления применяется метод 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 3

Недавно я работал над простой игрой в Python 3, которая включает в себя tkinter. Я столкнулся с серьезной проблемой. Я не могу понять, как удалить метку или кнопку из окна tkinter в Python 3.5.2. Если вы знаете, пожалуйста, ответьте. Спасибо!

Поделиться Источник 12 февраля 2018 в 23:31

2 ответа

Если вы используете pack для добавления виджета в окно, то вы можете использовать pack_forget для его удаления из окна. Чтобы добавить его снова, вызовите pack снова. Если вы хотите навсегда избавиться от виджета, то используйте destroy (вы не сможете получить его обратно).

Поделиться 12 февраля 2018 в 23:36

Например, вот метка:

widgetname = tk.Label(text = "Hello World").pack() 

Вы можете использовать свойство destroy() для окончательного удаления. Это невозможно получить, и виджет нужно будет определить снова.

widgetname.destroy() 

Полный пример можно найти здесь

Или вы можете использовать pack_forget() для скрытия элемента. Вам просто нужно снова использовать pack() или grid() , чтобы показать его снова

widgetname.pack_forget() 

Как удалить кнопку в tkinter python

Одним из наиболее используемых компонентов в графических программах является кнопка. В tkinter кнопки представлены классом Button . Основные параметры виджета Button:

  • command : функция, которая вызывается при нажатии на кнопку
  • compund : устанавливает расположение картинки и текста относительно друг друга
  • cursor : курсор указателя мыши при наведении на метку
  • image : ссылка на изображение, которое отображается на метке
  • pading : отступы от границ вилжета до его текста
  • state : состояние кнопки
  • text : устанавливает текст метки
  • textvariable : устанавливает привязку к элементу StringVar
  • underline : указывает на номер символа в тексте кнопки, который подчеркивается. По умолчанию значение -1, то есть никакой символ не подчеркивается
  • width : ширина виджета

Добавим в окно обычную кнопку из пакета ttk:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") # стандартная кнопка btn = ttk.Button(text="Button") btn.pack() root.mainloop()

Для создания кнопки используется конструктор Button() . В этом конструкторе с помощью параметра text можно установить текст кнопки.

Чтобы разместить виджет в контейнере (главном окне), у него вызывается метод pack() . На ОС Windows мы получим следующую кнопку:

Кнопка в tkinter в Python

Конструктор Button определяет различные параметры, которые позволяют настроить поведение и внешний вид кнопки. Однако конкретный набор параметров зависит от того, используем ли мы кнопки из пакета tkinter или из пакета tkinter.ttk.

Обработка нажатия на кнопку

Для обработки нажатия на кнопку необходимо установить в конструкторе параметр command , присвоив ему ссылку на функцию, которая будет срабатывать при нажатии:

from tkinter import * from tkinter import ttk clicks = 0 def click_button(): global clicks clicks += 1 # изменяем текст на кнопке btn["text"] = f"Clicks " root = Tk() root.title("METANIT.COM") root.geometry("250x150") btn = ttk.Button(text="Click Me", command=click_button) btn.pack() root.mainloop()

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

Обработка нажатия кнопки в tkinter и Python

Отключение кнопки

Для ttk-кнопки мы можем установить отключенное состояние с помощью метода state() , передав ему значение "disabled". С такой кнопкой пользователь не сможет взаимодействовать:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click Me", state=["disabled"]) btn.pack() root.mainloop()

При этом в метод state мы можем передать набор состояний, поэтому значение "disabled" передается внутри списка.

Python-сообщество

[RSS Feed]

  • Начало
  • » GUI
  • » Tkinter кнопки Добавить - Удалить

#1 Апрель 26, 2011 18:35:10

sligel От: Зарегистрирован: 2010-12-15 Сообщения: 13 Репутация: 0 Профиль Отправить e-mail

Tkinter кнопки Добавить - Удалить

С целью изучения Tkinter пытаюсь написать приложение в котором находятся кнопки Добавить и Удалить, которые соответственно добавляют / удаляют, в моем случае строку с виджетом (лейбл). С добавлением кое что получилось, не знаю может можно как то по оптимальнее, а вот с удалением строки возникают проблеммы…

from tkinter import *

main = Tk()


def add_button(event):

position_in_list = button_list.index(event.widget)+1

button_list.insert(position_in_list,Button(main,text='Добавить. '))
button_list[position_in_list].bind('',add_button)

button_del.insert(position_in_list,Button(main,text='Удалить. '))
button_del[position_in_list].bind('',del_button)

add_obj(position_in_list)
draw()

def del_button(event):
position_in_list = button_del.index(event.widget)

del button_list[position_in_list]
del button_del[position_in_list]
del obj_list[position_in_list]

button_list[position_in_list].destroy
button_del[position_in_list].destroy
obj_list[position_in_list].destroy

draw()


def draw():
for i in range(len(button_list)):
button_list[i].grid(row=i,column=1)
button_del[i].grid(row=i,column=2)
obj_list[i].grid(row=i,column=0)


def add_obj(position_in_list):
obj_list.insert(position_in_list,Label(main,text='. '+\
str(position_in_list)+'. '))


button_list = [Button(main,text='Добавить. ')]
button_list[0].bind('',add_button)
button_list[0].grid(row=0,column=1)

button_del = [Button(main,text='Удалить. ')]
button_del[0].bind('',del_button)
button_del[0].grid(row=0,column=2)

obj_list = [Label(main,text='я тут местный. ')]
obj_list[0].grid(row=0,column=0)

main.mainloop()

#2 Апрель 27, 2011 15:21:38

Voroshek От: Зарегистрирован: 2011-03-11 Сообщения: 54 Репутация: 0 Профиль Отправить e-mail

Tkinter кнопки Добавить - Удалить

Было бы неплохо уточнить, что тебе именно не нравится.
Я заметил, что при удалении цифры наезжают на “я тут местный” (ведь она - часть списка!). Это решаем так: надпись делаем отдельной меткой

label = Label(main, text='Я тут местный')
label.grid(row=0, column=0)

obj_list помещаем ниже grid(row=1, column=0), и в def draw() поправляем его соответственно: row=i+1.
Вроде всё.

Отредактировано (Апрель 27, 2011 15:22:49)

#3 Апрель 27, 2011 23:11:47

sligel От: Зарегистрирован: 2010-12-15 Сообщения: 13 Репутация: 0 Профиль Отправить e-mail

Tkinter кнопки Добавить - Удалить

🙂 Разобрался аж самому смешно

def del_button(event): 
position_in_list = button_del.index(event.widget)

obj_list[position_in_list].destroy() # забыл поставить скобки после destroy
button_list[position_in_list].destroy() # и поменял местами
button_del[position_in_list].destroy() # сначала уничтожаю виджет
# а потом удаляю его из списка
del button_list[position_in_list]
del button_del[position_in_list]
del obj_list[position_in_list]

а так получалось что виджет рисуется на виджете( это и был как раз эффект когда цифра наезжала на ‘я тут местный ’),
и после нажатия кнопки удалить, удаляет виджеты только из списка …

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *