Python Tkinter проблема с удалением виджетов

porosenok

Новичок
Пользователь
Май 18, 2022
1
0
1
windows 10, python 3.10.2,Tkinter
Python Tkinter- в общем столкнулся с проблемой при написании кода, суть в том что при указании в Spinboxе номера и нажатии кнопки создаются поля entry на пример при цифре 1 создаются 2 поля, при цифре 2 создаются 4 поля и тд... Но я хочу сделать так чтобы если пользователь ошибся и указал сначала цифру два и нажал кнопку(создается 4 поля), то, чтобы он мог нажать цифру 1(создается 2 поля), а лишние созданные поля при этом удалились
отрезок кода:
Python:
from tkinter import *
window =Tk()
window.geometry('800x600')
window.resizable(width=0, height=0)
window.title("ddd")
spinbox1= Spinbox(from_=1, to=2)
def start1():
    n=int(spinbox1.get())
    if n==1:
        label19=Label(text="Тощина")
        label20=Label(text="Тепло")
        label19.place(relx=.65,rely=.05)
        label20.place(relx=.8,rely=.05)
        entry1_1= Entry()
        entry1_1.place(relx=.65,rely=.09)
        entry1_2= Entry()
        entry1_2.place(relx=.82,rely=.09)
    if n==2:
        label19=Label(text="Тощина ")
        label20=Label(text="Тепло")
        label19.place(relx=.65,rely=.05)
        label20.place(relx=.8,rely=.05)
        entry1_1= Entry()
        entry1_1.place(relx=.65,rely=.09)
        entry1_2= Entry()
        entry1_2.place(relx=.82,rely=.09)
        entry2_1= Entry()
        entry2_1.place(relx=.65,rely=.14)
        entry2_2= Entry()
        entry2_2.place(relx=.82,rely=.14)
spinbox1.pack()
button=Button(command=start1)
button.pack()
window.mainloop
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 650
472
83
лучше скрыть виджет, так как при удалении вы теряете его, и нужно будет инициализировать его заново
так же убрал из функции инициализацию виджетов, чтобы при каждом нажатии не создавались все новые и новые виджеты
в питоне не знаю, но в с/с++ - это утечка памяти

Python:
import tkinter as tk


def start1():
    n = int(spinbox1.get())
    if n == 1:
        label19.place(relx=.65,rely=.05)
        label20.place(relx=.8,rely=.05)
        entry1_1.place(relx=.65,rely=.09)
        entry1_2.place(relx=.82,rely=.09)
        entry2_1.place_forget()
        entry2_2.place_forget()
    if n == 2:
        label19.place(relx=.65,rely=.05)
        label20.place(relx=.8,rely=.05)
        entry1_1.place(relx=.65,rely=.09)
        entry1_2.place(relx=.82,rely=.09)
        entry2_1.place(relx=.65,rely=.14)
        entry2_2.place(relx=.82,rely=.14)


window = tk.Tk()
window.geometry('800x600')
window.resizable(width=0, height=0)
window.title("ddd")
spinbox1 = tk.Spinbox(from_=1, to=2)
spinbox1.pack()
button = tk.Button(text="Нажми", command=start1)
button.pack()

label19 = tk.Label(text="Тощина")
label20 = tk.Label(text="Тепло")
entry1_1 = tk.Entry()
entry1_2 = tk.Entry()
entry2_1 = tk.Entry()
entry2_2 = tk.Entry()

window.mainloop()
 
  • Мне нравится
Реакции: porosenok

Форум IT Специалистов