Я пытаюсь динамически создавать определенное количество виджетов, а затем иметь возможность их изменять.
Например, мне нужны некоторые флажки:
# Class level lists to store the CheckButtons and their values
self.checkbutton_list = []
self.checkbutton_values_list = []
# With self.amount_of_widgets an integer
for i in range(0, self.amount_of_widgets):
# We create the value of the current CheckButton, default is 0
self.checkbutton_values_list.append(IntVar())
# We create the ChekButton and append it to our list
self.checkbutton_list.append(Checkbutton(self.canvasR,
text="rtest : " + str(i),
variable=self.checkbutton_values_list[i],
onvalue=1,
offvalue=0,
height=1,
width=10))
# As there is a lot of CheckButtons, they have to be browsable inside the canvas
# named canvasR, wich has a scrollbar. To browse the created CheckButtons in the
# canva, we need to use the create_window function :
self.canvasR.create_window(x, y, window=self.comp_checkbutton_list[i])
y = y + 100
Это поколение работает хорошо и я могу создать все нужные виджеты в нужных местах и сохранить их в выделенных списках. Например, я делаю что-то похожее для создания пустых изображений (я хочу обновить эти изображения позже):
for i in range(0, self.amount_of_widgets):
# With default photo a PhotoImage object stored at class level
self.photo_list.append(self.default_photo)
self.photo_area_list.append(self.canvasR.create_image(x, y,
image=self.photo_list[i],
anchor=NW))
y = y + 100
Проблема в том, что я не могу обновить созданные виджеты, если я пытаюсь вызвать .itemconfig()
как в В следующем коде я получаю _tkinter.TclError: недопустимый логический оператор в выражении поиска тега :
for i in range(0, self.max_image_displayed):
self.canvasR.itemconfig(self.checkbutton_list[i], fill='black', text='')
Я понимаю, что он может не работать, поскольку каждый виджет специально не существует для основной класс, потому что они не были явно созданы внутри класса. В этой области существует только список, хранящий их.
Но я не собираюсь объявлять тысячи полей CheckBoxes или Images, одно за другим, вручную в моем коде, например:
self.area1 = self.canvasR.create_image(0, 0, image=self.photoimage1, anchor=NW)
self.area_list.append(self.area1)
self.area2 = self.canvasR.create_image(0, 100, image=self.photoimage2, anchor=NW)
self.area_list.append(self.area2)
# ...
self.area9999 = self.canvasR.create_image(0, 0, image=self.photoimage999, anchor=NW)
self.area_list.append(self.area9999)
Что я мог сделать ?