使用tkinter中的For循环删除/创建标签

使用tkinter中的For循环删除/创建标签,tkinter,Tkinter,我计划使用for循环创建标签。每次我从组合框中选择不同的选项时,旧标签应该被删除,新标签应该被创建。我使用下面的代码,但得到错误 我使用python3.7.2: import tkinter as tk from tkinter import ttk master = tk.Tk() class job(): def fun(self,eventObject): print(self.box_value.get()) dimensions = ['ab'

我计划使用for循环创建标签。每次我从组合框中选择不同的选项时,旧标签应该被删除,新标签应该被创建。我使用下面的代码,但得到错误

我使用python3.7.2

import tkinter as tk
from tkinter import ttk
master = tk.Tk()

class job():
    def fun(self,eventObject):
        print(self.box_value.get())
        dimensions = ['ab', 'bc','cd','de']
        self.labl.destroy()
        z = 20
        for i in range(len(dimensions)):
            self.labl = tk.Label(master, text=dimensions[i])
            self.labl.place(x=z, y=20)
            z = z + 130
    def __init__(self):
        self.box_value=tk.StringVar()
        self.combo = ttk.Combobox(master, textvariable=self.box_value, state='readonly')
        self.combo['values'] = ['Cd', 'Ale']
        self.combo.bind("<<ComboboxSelected>>", self.fun)
        self.combo.current(1)
        self.combo.place(x=80,y=100)

a=job()

master.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
master=tk.tk()
类作业():
def fun(自我、事件对象):
打印(self.box\u value.get())
维度=['ab'、'bc'、'cd'、'de']
self.labl.destroy()
z=20
对于范围内的i(长度(尺寸)):
self.labl=tk.Label(主控,文本=尺寸[i])
自标签位置(x=z,y=20)
z=z+130
定义初始化(自):
self.box_value=tk.StringVar()
self.combo=ttk.Combobox(主控,textvariable=self.box\u值,state='readonly')
self.combo['values']=['Cd','Ale']
self.combo.bind(“,self.fun)
自我组合当前(1)
self.combo.place(x=80,y=100)
a=作业()
master.mainloop()
AttributeError:“作业”对象没有属性“标签”


我自己管理它,以前我无法获得实现它的逻辑。但现在我很好,为将来的参考发布了答案:

import tkinter as tk
from tkinter import ttk
master = tk.Tk()

class job():
    def fun(self,eventObject):
        dimensions = ['gdgd','dfddf','bgsdg']
        try:
            if self.check == 1:
                for i in self.labels:
                    i.destroy()
        except:
            pass
        z = 20
        self.labels=[]
        for i in range(len(dimensions)):
            self.labl = tk.Label(master, text=dimensions[i])
            self.labl.place(x=z, y=20)
            self.labels.append(self.labl)
            z = z + 130
    self.check = 1
def __init__(self):
    self.box_value=tk.StringVar()
    self.combo = ttk.Combobox(master, textvariable=self.box_value, state='readonly')
    self.combo['values'] = ['ab', 'bc', 'cd']
    self.combo.bind("<<ComboboxSelected>>", self.fun)
    self.combo.current(1)
    self.combo.place(x=80,y=100)

a=job()

master.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
master=tk.tk()
类作业():
def fun(自我、事件对象):
维度=['gdgd'、'dfddf'、'bgsdg']
尝试:
如果self.check==1:
对于self.labels中的i:
i、 销毁
除:
通过
z=20
self.labels=[]
对于范围内的i(长度(尺寸)):
self.labl=tk.Label(主控,文本=尺寸[i])
自标签位置(x=z,y=20)
self.labels.append(self.labl)
z=z+130
自检=1
定义初始化(自):
self.box_value=tk.StringVar()
self.combo=ttk.Combobox(主控,textvariable=self.box\u值,state='readonly')
self.combo['values']=['ab','bc','cd']
self.combo.bind(“,self.fun)
自我组合当前(1)
self.combo.place(x=80,y=100)
a=作业()
master.mainloop()

错误会准确地告诉您出了什么问题。你想破坏一些不存在的东西。问问自己:什么是
self.labl
第一次调用
fun
?我知道小部件不存在,这就是它出错的原因。但是你能帮我达到我的要求吗。我在谷歌上搜索了很多,但是没有用。在下一次迭代中创建新的小部件之前,我如何全局获取小部件的详细信息并将其删除?你无法获取不存在的东西的详细信息。只需将
self.labl
初始化为
None
,然后在尝试删除它之前检查它是否为
None
。我在第一个循环中使用了
try
,除了
,因为小部件最初不在那里。无论如何谢谢你!