tkinter: Что мне делать, если я хочу удалить номер в порядке расположения кнопки? - PullRequest
0 голосов
/ 12 октября 2018
from tkinter import*

import tkinter as tk

class QueueApp(tk.Tk):
    def __init__(self):
    super().__init__()
    self.title(' Queue')
    self.minsize(200, 200)
    self.x=0
    self.frame1=tk.Frame(self)
    self.frame1.place(x=0,y=0,width=70,height=170,anchor='nw')
    self.frame2=tk.Frame(self)
    self.frame2.place(x=40,y=175,anchor='nw')
    self.frame3 = tk.Frame(self)
    self.frame3.place(x=100, y=0, width=50, height=170, anchor='nw')
    add=tk.Button(self.frame2,text='add',command=self.add_text)
    add.pack()

def add_text(self):
    self.x=self.x+1
    self.text=tk.Label(self.frame1,text=self.x)
    self.text.pack(side=tk.TOP)


  self.delete_button=tk.Button(self.frame3,text='delete',
  command=self.delete)
    self.delete_button.pack(side=tk.TOP)

def delete(self):
    self.text.destroy()
    self.delete_button.destroy()


if __name__=='__main__':
    app = QueueApp()
    app.mainloop()

Я хочу удалить 2, когда я нажимаю вторую кнопку удаления, но он удалит только 4, когда последний номер равен 4. Независимо от того, какую кнопку я нажимаю, он всегда будет удалять последний номер.Что делать, если я хочу удалить номер в порядке кнопки?

пример

1 Ответ

0 голосов
/ 12 октября 2018

Каждый раз, когда вы создаете новый текстовый виджет, вы переопределяете предыдущий.Поэтому вы можете удалить только последний созданный элемент.

Возможное решение: создать виджеты кнопок и меток и сохранить их в списке.

import tkinter as tk

class QueueApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title(' Queue')
        self.minsize(200, 200)
        self.x = 0
        self.frame1=tk.Frame(self)
        self.frame1.place(x=0,y=0,width=70,height=170,anchor='nw')
        self.frame2=tk.Frame(self)
        self.frame2.place(x=40,y=175,anchor='nw')
        self.frame3 = tk.Frame(self)
        self.frame3.place(x=100, y=0, width=50, height=170, anchor='nw')
        add=tk.Button(self.frame2,text='add',command=self.add_text)
        add.pack()
        #create lists
        self.myDeleteButtons = []
        self.myTextLabels = []

    def add_text(self):
        self.button_name = "delete"+str(self.x)
        self.text=tk.Label(self.frame1,text=self.x)
        self.text.pack(side=tk.TOP)
        #lambda: for passing counter variable as argument 
        self.delete_button=tk.Button(self.frame3,text=self.button_name,
                                     command=lambda x=self.x: self.delete(x))
        self.delete_button.pack(side=tk.TOP)
        #add widgets in list
        self.myDeleteButtons.append(self.delete_button)
        self.myTextLabels.append(self.text)
        self.x += 1

    def delete(self, button_nr):
        #use argument as index
        self.myDeleteButtons[button_nr].destroy()
        self.myTextLabels[button_nr].destroy()


if __name__=='__main__':
    app = QueueApp()
    app.mainloop()

При удалении всех кнопок можно установить переменную счетчика.в ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...