Как получить доступ к динамическим переменным?

#python #oop #tkinter

#python #ооп #tkinter

Вопрос:

Я создал динамические переменные в своем проекте tkinter, но я не могу получить к нему доступ, как я могу это сделать?

 dict_ndfitemcostcategory = {}
for ndicc in range(2, 133):
    # self.neighborhood_details_item_cost_category_entry_2  - starting point
    dict_ndfitemcostcategory["self.neighborhood_details_item_cost_category_entry"   "_"   str(ndicc)] = tk.Text(self.frame, height=2, width=25, bg='alice blue', wrap=tk.WORD)
    dict_ndfitemcostcategory["self.neighborhood_details_item_cost_category_entry"   "_"   str(ndicc)].grid(row=ndicc, column=3, padx=5, pady = 4)
  

Я попытался запустить:

 self.neighborhood_details_item_cost_category_entry_2.insert(tk.END, "asd")
  

Но, похоже, его невозможно найти:
AttributeError: 'Neighborhood_Details' object has no attribute 'dict_ndn'

Ответ №1:

Вы не определяете динамические переменные; вы определяете только обычные dict , которые выходят за пределы области видимости при возврате функции. Сам словарь должен быть атрибутом экземпляра с желаемыми «динамическими» атрибутами в качестве ключей.

 self.dict_ndfitemcostcategory = {}
for ndicc in range(2, 133):   
    key = "neighborhood_details_item_cost_category_entry"   "_"   str(ndicc)
    self.dict_ndfitemcostcategory[key] = tk.Text(self.frame, height=2, width=25, bg='alice blue', wrap=tk.WORD)
    self.dict_ndfitemcostcategory[key].grid(row=ndicc, column=3, padx=5, pady = 4)
  

Затем

 self.dict_ndfitemcostcategory["neighborhood_details_item_cost_category_entry_2"].insert(tk.END, "asd")
  

Комментарии:

1. Большое вам спасибо за объяснение и решение! 🙂