Как очистить окно в tkinter целиком одной командой?
Как очистить окно в tkinter целиком одной командой? То есть не по одной кнопке ( кнопка.destroy()), а сразу одной командой.
Отслеживать
задан 13 фев 2021 в 9:25
166 2 2 серебряных знака 14 14 бронзовых знаков
Удали окно и создай новое
13 фев 2021 в 9:29
13 фев 2021 в 10:45
Можно все содержимое окна создавать внутри Frame, потом одной командой удалить этот Frame.
19 фев 2021 в 17:11
27 фев 2021 в 17:10
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- python
- python-3.x
- tkinter
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как очистить окно в 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 нарисована линия. При нажатии на один из переключателей изменяем цвет линии:
Очистить экран
Хочу удалить первый вывод _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()
Как очистить окно tkinter при нажатии на кнопку?
Доброго времени бытия!
Я реализовал код который выводит кардиоиду при нажатие кнопки Draw(пользователь может задавать свои значения радиуса и количества линий). И если несколько раз подряд нажать на неё с разными параметрами то кардиоиды будут накладываться друг на друга. Как реализовать так чтоб каждый раз была отрисовка новой кардиоиды или реализовать кнопку для очистки окна. Вот код:
from tkinter import * import math def cardioid(radius, num_lines): radius = int(radius) num_lines = int(num_lines) if num_lines == 1: num_lines = 2 for i in range(num_lines): theta = (2 * math.pi / num_lines) * i x1 = int(radius * math.cos(theta)) + 320 y1 = int(radius * math.sin(theta)) + 250 x2 = int(radius * math.cos(2 * theta)) + 320 y2 = int(radius * math.sin(2 * theta)) + 250 canvas.create_line((x1, y1), (x2, y2)) root = Tk() root.title("Cardioid") canvas = Canvas(width=700, height=500, bg='green') r = StringVar() n = StringVar() lbl = Label(text="Enter radius:") lbl.grid(column=0, row=4) lbl_1 = Label(text="Enter num lines:") lbl_1.grid(column=0,row=6) b_draw = Button(text="Draw", width=15, command=lambda: cardioid(r.get(),n.get())) b_draw.grid(row=0, column=0) b_clear = Button(text = "Clear", width=15) b_clear.grid(row=1,column=0) ent = Entry(root, width=20,textvariable=r) ent.grid(row=5, column=0) ent_1 = Entry(root, width=20, textvariable=n) ent_1.grid(row=7, column=0) Exit = Button(root, text ="Quit", width=15, command=root.quit) Exit.grid(row=19, column=0) canvas.grid(row=0, column=1, rowspan=20) root.mainloop()
- Вопрос задан более года назад
- 533 просмотра
1 комментарий
Средний 1 комментарий
