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

Как очистить окно в tkinter

Очистить экран

Хочу удалить первый вывод _Radiobutton = Radiobutton(windows, variable=GlobalVar_Int, fg=»black», text=Str_Otvet, value=Value_Otvet, command=select), поскольку после когда в функций я хочу вывести другой ридобуттон они друг над другом налаживаются, пытался сделать с помощью destroy но в функцию ее не запихать что бы именно первый удалял. Как удалить первый и последующий элементы в функций поскольку в фукнцию nifiga() я после буду записывать новые варианты для ответов.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
from tkinter import * from tkinter import messagebox RITE = int() INT_VALUE = 0 windows = Tk() windows.title("My Program") windows.geometry("300x400") def select(): global RITE if(INT_VALUE == 0 and GlobalVar_Int.get() == 1): RITE += 1 if(INT_VALUE == 1 and GlobalVar_Int.get() == 2): RITE += 1 if(INT_VALUE == 2 and GlobalVar_Int.get() == 3): RITE += 1 if(INT_VALUE == 3 and GlobalVar_Int.get() == 4): RITE += 1 def nifiga(): global RITE global INT_VALUE INT_VALUE += 1 relY = float(0.1) if(INT_VALUE == 2): Otvet = [("Хз", 1),("Направленное движение заряженных частиц",2),("Я ем",3),("Я кушаю",4)] title_label.config(text="Что такое ток?") GlobalVar_Int.set(0) for Str_Otvet,Value_Otvet in Otvet: _Radiobutton = Radiobutton(windows, variable=GlobalVar_Int, fg="black", text=Str_Otvet, value=Value_Otvet, command=select) relY += 0.1 _Radiobutton.place(relx=0.1,rely=relY) title_label = Label(windows,text="Какой формы Земля?",fg="red") title_label.place(relx=0.3,rely=0.1) Otvet = [("Круглая", 1),("Квадртная",2),("Это Марс",3),("Вообще-то Луна",4)] GlobalVar_Int = IntVar() relY = float(0.1) for Str_Otvet,Value_Otvet in Otvet: _Radiobutton = Radiobutton(windows, variable=GlobalVar_Int, fg="black", text=Str_Otvet, value=Value_Otvet, command=select) relY += 0.1 _Radiobutton.place(relx=0.1,rely=relY) if(GlobalVar_Int.get() == 1): if(Value_Otvet == 1): RITE += 1 relY += 0.2 Btn_Button = Button(windows,text="Ответить", command=nifiga) Btn_Button.place(relx=0.38,rely=relY) windows.mainloop()

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

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Как очистить окно tkinter

#1 Июль 25, 2020 19:30:12

Simka Зарегистрирован: 2020-02-15 Сообщения: 71 Репутация: 1 Профиль Отправить e-mail

Как очистить окно tkinter

В создаваемой программе имеется фрагмент:

if event.keysym == 'a': 
canvas.move(1, 0, -3)
canvas.create_text(150, 150, text='my text', font=('Times', 25))

Далее в коде следует аналогичный фрагмент ( начиная с elif ) для другой клавиши клавиатуры. И выводится другой текст поверх предыдущего. Проблема — как очистить окно от предыдущего текста? Просмотрел книги, какие доступны, но как поместить на окне текст или картинку gif— пишут, а как убрать — не нахожу.
Нашел в сети команду canvas.delete(ALL) , но у меня tkinter воспринимает её как неизвестную.
Подумал через несколько секунд изменить цвет шрифта под фон окна, но и такую команду не знаю как применить…
Подскажите!

Отредактировано Simka (Июль 25, 2020 21:16:25)

Как полностью удалить все виджеты из окна tkinter в python?

Каким образом можно полностью удалить все виджеты которые присутствуют в окне tkinter на примере данного кода:

from tkinter import * tk = Tk() tk.title('Разрушители') main_lbl = Label(tk, text='Приветствую в "Разрушителях"', fg='red', font='Arial 20') wellcome_lbl = Label(tk, text='Бродя по лесу ты наткнулся на своего первого противника - ' 'ВОЛКА \n эти опасные твари никогда не отступают , так что В БОЙ. ', fg='black', font='Arial 20') next_btn=Button(tk, text='Далее', width=30, height=5, font=20) def next1(event): pass #Как сделать что бы кнопка всё удаляла? next_btn.bind(tk, next1) main_lbl.pack() wellcome_lbl.pack() next_btn.pack() tk.mainloop() 

Отслеживать
6,343 5 5 золотых знаков 25 25 серебряных знаков 55 55 бронзовых знаков
задан 15 янв 2018 в 18:22
Vitalyk Chernysh Vitalyk Chernysh
341 2 2 серебряных знака 12 12 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

при помощи функции destroy можно уничтожить объекты. Пример на вашем коде:

from tkinter import * def next_1(): destroy_object = [welcome_lbl, main_lbl, next_btn] for object_name in destroy_object: object_name.destroy() tk = Tk() tk.title('Разрушители') main_lbl = Label(tk, text='Приветствую в "Разрушителях"', fg='red', font='Arial 20') welcome_lbl = Label(tk, text='Бродя по лесу ты наткнулся на своего первого противника - ВОЛКА' '\n эти опасные твари никогда не отступают, так что В БОЙ. ', fg='black', font='Arial 20') next_btn = Button(tk, text='Далее', width=30, height=5, font=20, command=next_1) main_lbl.pack() welcome_lbl.pack() next_btn.pack() tk.mainloop() 

Так же если в дальнейшем будете пользоваться теми виджетами которые хотите «временно скрыть» можно вместо .pack() использовать .grid() и при помощи winfo.viewable() скрывать объекты и заново делать видимыми.

from tkinter import * def next_1(): destroy_object = [welcome_lbl, main_lbl] for object_name in destroy_object: if object_name.winfo_viewable(): object_name.grid_remove() else: object_name.grid() tk = Tk() tk.title('Разрушители') main_lbl = Label(tk, text='Приветствую в "Разрушителях"', fg='red', font='Arial 20') welcome_lbl = Label(tk, text='Бродя по лесу ты наткнулся на своего первого противника - ВОЛКА' '\n эти опасные твари никогда не отступают, так что В БОЙ. ', fg='black', font='Arial 20') next_btn = Button(tk, text='Далее', width=30, height=5, font=20, command=next_1) main_lbl.grid() welcome_lbl.grid() next_btn.grid() tk.mainloop() 

Как очистить окно в 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 нарисована линия. При нажатии на один из переключателей изменяем цвет линии:

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

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