Tkinter破坏按钮由循环创建

时间:2016-05-31 19:17:31

标签: python function button tkinter destroy

我想创建一个提醒,通过按确认按钮提醒我在组合框中选择的时间。我将时间放在标签中,并创建一个删除按钮,可以通过循环删除同一行中的标签和按钮本身。如果只有一个标签,它可以工作,但如果我增加了它的数量,它只会破坏最后一个标签和按钮。

下面是我的代码:

 p <- data.frame(a = setNames(tapply(df$Item, df$Week, paste), paste("Week", unique(df$Week), "has:") ))
 p
                             a
Week 1 has: A11, A12, B11, C12
Week 2 has:           A11, A12
Week 3 has: B11, C12, C11, A12

我认为循环或函数deletelabel一定有问题,但我仍然无法修复它。

2 个答案:

答案 0 :(得分:0)

self.savelabel_list.remove(self.savelabel_list[idx])

请勿更改列表。如果删除标签/按钮#1,则标签#2变为#1,因此当您按下按钮删除标签#2时,它会删除标签#3,因为所有内容都已向上移动。另外,请注意,每次调用“save()”时,它都会创建一组覆盖旧窗口小部件的新窗口小部件,最终会降低计算机速度。仅创建并标记新时间标签。使用self.next_row变量(或其他)跟踪行,并每次增加一行。

答案 1 :(得分:0)

这是一个指出可用类是多少的问题。为每个提醒创建一个带有标签和关闭按钮的新类。

from tkinter import *
from tkinter import ttk

class NewButton:
    def __init__(self, master, label_text, this_row):
        ## put everything in a new frame so destroying
        ## one frame will destroy everything in it
        self.fr=Frame(master)
        self.fr.grid(row=this_row, column=1)

        Label(self.fr, text=label_text).grid(row=0, column=1)
        Button(self.fr, text="Close This",
               command=self.fr.destroy).grid(row=0, column=2)

class Final:
    def __init__(self,app):
        self.app=app
        self.this_row=4

        self.time_var= StringVar()
        self.timecombo = ttk.Combobox(app,textvariable=self.time_var)
        self.timecombo.grid(row=0,column=1)

        self.button1=Button(app,text='confirmed',command=self.save)
        self.button1.grid(row=3,column=2)


    def save(self):
        save_text = self.time_var.get()
        self.this_row += 1
        next_button=NewButton(self.app, save_text, self.this_row)
        self.time_var.set("")

app = Tk()
a = Final(app)
app.title('things to do')
app.geometry("500x300+200+200")

app.mainloop()