AttributeError: обектът 'str' няма атрибут 'set' грешка в python pyQt

Имам този код:

self.entriesx = self.generate_stringvars()

# Fill in the entry fields if a template is selected.
def autofill(self):
    # Generate a dictionary of all the saved templates.
    test_dictionary = self.build_test_dictionary()
    # Retrive the selected qual name from the form.
    self.coded_entry = self.comboBox.currentText()
    entries = test_dictionary[self.coded_entry]
    # Set each entry field in self.entriesx to the corresponding value
    # from the template.
    i_count = 0
    for i in self.entriesx:
        i.set(entries[i_count])
        i_count += 1
    # Reload the entry fields with their new values.
    self.add_entry_fields()

Функцията autofill(self) автоматично попълва съответните записи в полетата за въвеждане въз основа на избран елемент от разгъващ се списък. Функцията за автоматично попълване също разчита на тази функция:

# Generate a list of string variables to store the entries.
def generate_stringvars(self):
    temp_entriesx = []
    count = 0
    while count < 21:
        temp_entriesx.append("")
        count += 1
    return temp_entriesx

Когато компилирам кода си, получавам грешка AttributeError: 'str' object has no attribute 'set' for i.set(entries[i_count]) в моята функция за автоматично попълване. Как да го поправя?

Редактиране: Това е последващ въпрос към тази публикация.


person prexos    schedule 20.06.2018    source източник
comment
@eyllanesc Публикацията, която смятате за дубликат, е моя. Казаха ми да публикувам горния въпрос в нов пост. Ето защо отново използвах част от предишния въпрос.   -  person prexos    schedule 20.06.2018
comment
Предишният въпрос трябва да обхваща преобразуването на stringVar (tkinter) в str (PyQt), така че не знам защо ви казаха това. но за мен да разделям въпрос на 2 излишно не е коректно. Заглавието на предишния ви въпрос трябва да е достатъчно и за двата въпроса, целта е една и съща, прочетете Как да питам   -  person eyllanesc    schedule 20.06.2018


Отговори (1)


За обърканите, това е продължение на този въпрос. OP се опитва да пренесе от Tkinter към pyQt.

StringVar на Tkinter има различен интерфейс от python str. Присвояването се извършва с помощта на оператора за присвояване (=). Освен това, като общо правило, опитайте се да не използвате i или подобни за типове, които не са цели числа. Не е грешно, просто лоша практика на кодиране. Освен това, тъй като вече не се нуждаете от самия елемент. Просто използвайте range.

for i in range(len(self.entriesx)):
    self.entriesx[i] = entries[i]
person buck54321    schedule 20.06.2018
comment
Благодаря отново! Много полезно обяснение. - person prexos; 20.06.2018