重置多个动态创建的标签

时间:2017-03-13 14:55:38

标签: python user-interface tkinter

我有一段接收根元素和字典(可变大小)的代码,并使用这个字典创建了2个 key,value 对字典对的标签行。< / p>

代码确实有效,但是当我用不同的字典调用函数时,它会将标签放在旧的字符之上,这使得它看起来很糟糕并且不会删除备用行(例如,我在上一个字典中有10行,而在目前的一个我只有5)。

我已经尝试过以某种方式将其放入列表中以便在方法开头销毁标签,但它不起作用。

我的尝试:

def dict_to_frame(self, root, dic):
    if self.labels_col_list is not None:
        for i, value in enumerate(self.labels_col_list):
            if value is not None:
                value.destroy()
                self.labels_val_list[i].destroy()
    curr_row = 3
    str_var_col_list = []
    str_var_val_list = []
    self.labels_col_list = []
    self.labels_val_list = []

    for col, val in dic.iteritems():
        if val is None:
            val = "Empty"
        s1 = StringVar()
        s1.set(col+": ")
        str_var_col_list.append(s1)
        s2 = StringVar()
        s2.set(val)
        str_var_val_list.append(s2)

        self.labels_col_list.append(None)
        self.labels_val_list.append(None)
    for i, value in enumerate(str_var_col_list):
        self.labels_col_list[i] = Label(root, textvariable=value).grid(column=1, row=curr_row, padx=5, pady=5)
        self.labels_val_list[i] = Label(root, textvariable=str_var_val_list[i]).grid(column=2, row=curr_row, padx=5, pady=5)
        curr_row += 1

我该如何解决?是否有更好的方法来创建动态标签而不是这种方式?

1 个答案:

答案 0 :(得分:0)

绝对最简单的解决方案是将标签放在专门用于保存这些标签的框架中。你可以破坏框架,它会破坏你的所有标签。此外,如果这是静态数据,则没有理由使用StringVar s。