from tkinter import * root=Tk() root.title("Нумерация") fr=Frame(root) fr.grid() kom_kv=Label(root,text='Введите номер квартиры с несколькими собственниками:') kom_kv.grid(row=1,column=0, sticky=W) kom_kv1=Entry(root) kom_kv1.grid(row=1,column=1, sticky=W) sobs=Label(root,text='Введите колличество собственников:') sobs.grid(row=2,column=0,sticky=W) sobs1=Entry(root) sobs1.grid(row=2,column=1,sticky=W) def addFlat(): fr=Frame(root) fr.grid() kom_kv=Label(fr,text='Введите номер квартиры с несколькими собственниками:') kom_kv.grid(row=1,column=0, sticky=W) kom_kv1=Entry(fr) kom_kv1.grid(row=1,column=1, sticky=W) sobs=Label(fr,text='Введите колличество собственников:') sobs.grid(row=2,column=0,sticky=W) sobs1=Entry(fr) sobs1.grid(row=2,column=1,sticky=W) def deleteFlat(): fr.grid_remove() kom_kv.grid_remove() kom_kv1.grid_remove() sobs.grid_remove() sobs1.grid_remove() plus=Button(fr,text='Добавить квартиру', command=addFlat) plus.grid(row=10, column=1, sticky=W) plus=Button(fr,text='Удалить квартиру', command=deleteFlat) plus.grid(row=10, column=2, sticky=W) root.mainloop() 
  • because you tie the buttons to the frame, and Label and Entry to root - Twiss
  • If I remove all the frame , and tie everything to root , then the label and the entry will not be deleted anyway - user327535
  • Well, as an option (if it suits you at all) - Twiss

1 answer 1

What worked incorrectly: The delete function always referred to the last frame with its components.

 def deleteFlat(): fr.grid_remove() kom_kv.grid_remove() kom_kv1.grid_remove() sobs.grid_remove() sobs1.grid_remove() 

How to fix: you can store frames on the stack - write by the Add button and delete by another button, here is an example code:

 class UI: sobsList = [] sobs1List = [] komKvList = [] komKv1List = [] frList = [] def __init__(self): self.root = Tk() self.root.title("Нумерация") self.fr = Frame(self.root) self.fr.grid() self.plus = Button(self.fr, text='Добавить квартиру', command=self.addFlat) self.plus.grid(row=10, column=1, sticky=W) self.plus = Button(self.fr, text='Удалить квартиру', command=self.deleteFlat) self.plus.grid(row=10, column=2, sticky=W) self.addFlat() def addFlat(self): fr = Frame(self.root) fr.grid() self.frList.append(fr) self.fr = fr kom_kv = Label(self.fr, text='Введите номер квартиры с несколькими собственниками:') kom_kv.grid(row=1, column=0, sticky=W) self.komKvList.append(kom_kv) kom_kv1 = Entry(self.fr) kom_kv1.grid(row=1,column=1, sticky=W) self.komKv1List.append(kom_kv1) sobs = Label(self.fr,text='Введите колличество собственников:') sobs.grid(row=2,column=0,sticky=W) self.sobsList.append(sobs) sobs1=Entry(self.fr) sobs1.grid(row=2,column=1,sticky=W) self.sobs1List.append(sobs1) def deleteFlat(self): self.frList.pop().grid_remove() self.komKvList.pop().grid_remove() self.komKv1List.pop().grid_remove() self.sobsList.pop().grid_remove() self.sobs1List.pop().grid_remove() if __name__ == '__main__': ui = UI() ui.root.mainloop() 

Thus, the next frame will be deleted from the interface by the delete button, no matter how many were created