Python PyQt4 .setText отказывается от переменных?

Я бы сказал, что неплохо разбираюсь в Python, но создание графических интерфейсов для меня — новая концепция. Я использовал Qt Creator для форматирования графического интерфейса и pyuic для преобразования кода из файла .ui.

У меня закодирована большая часть графического интерфейса, но у меня возникла проблема с обновлением текста для меток для редактирования строк, кнопок и т. д. Таким образом, этот графический интерфейс имеет окно параметров, которое открывается из основной программы, где пользователь может указать определенные параметры. В настоящее время я открываю параметры, устанавливаю значения, закрываю, снова открываю окно параметров, и текст не изменился на новые значения, которые являются переменными. Однако простые струны работают. Переменные «прилипают» только при перезапуске программы.

Я импортирую файл config.py, в котором есть переменная, содержащая строку параметров. Они форматируются и устанавливаются вместе со всеми другими метками и т. д. Но по какой-то причине они не устанавливаются.

config.py

configAttrs="clientid,oauth,123,source,123"

Вложенная функция mainProgram.py, используемая для установки текста меток и т. д.

def retranslateUi(self, OptionsWindow):
    OptionsWindow.setWindowTitle(_translate("OptionsWindow", "OptionsWindow", None))
    self.label_MainOptions.setText(_translate("OptionsWindow", "Options", None))


    confs = config.configAttrs.split(',')
    clientid = str(confs[0])
    oauth =  str(confs[1])
    cache = str(confs[2])
    heightAdjust = str(confs[4])

    #does NOT work when reopening options window
    #does work with restart
    self.lineEdit_ClientID.setText(_translate("OptionsWindow", clientid, None))

    #does NOT work when reopening options window
    #does work with restart
    self.lineEdit_ClientID.setText('{0}'.format(clientid))

    #does work when reopening options window
    #does work with restart
    self.lineEdit_ClientID.setText(_translate("OptionsWindow", 'string_clientid', None))

Сокращен приведенный выше код.*


person datguy.dev    schedule 30.05.2017    source источник
comment
Когда вы говорите, что это не работает, вы имеете в виду, что при повторном запуске приложения оно не показывает то, что вы видели перед его закрытием?   -  person eyllanesc    schedule 30.05.2017
comment
Я новичок в stackoverflow, есть ли здесь кнопка ответа? :D Я добавил галереи в ОП, чтобы выразить проблему.   -  person datguy.dev    schedule 30.05.2017
comment
Я все еще не понимаю вас, вы могли бы объяснить это лучше.   -  person eyllanesc    schedule 30.05.2017
comment
Не ставьте ссылки на изображения, по возможности старайтесь работать здесь, иначе через какое-то время эти ссылки будут битые и никто не сможет их увидеть или повторить решение или понять проблему.   -  person eyllanesc    schedule 30.05.2017
comment
Я понимаю вашу проблему, чтобы решить ее, мне нужно иметь минимальный код и воспроизвести ошибку, а код, который вы показываете, не ... вы можете поделиться своим кодом через github, диск или аналогичный.   -  person eyllanesc    schedule 30.05.2017
comment
Спасибо за внимание, но я не знаю, как это объяснить дальше. Я разместил папку проекта, если вам интересно. Если найду решение, смогу более аккуратно отредактировать пост.   -  person datguy.dev    schedule 30.05.2017


Ответы (1)


Проблема вызвана тем, что, хотя файл config.py изменен, он не перезагружается автоматически python, чтобы принудительно его использовать, вы должны использовать reload в вашем случае:

def retranslateUi(self, OptionsWindow):
    [...]
    reload(config)
    confs = config.configAttrs.split(',')
    [...]
person eyllanesc    schedule 30.05.2017
comment
Это имеет смысл. В файл конфигурации внесены изменения, но они импортируются только один раз в самом верху файла main.py. Таким образом, изменения появятся только после полного перезапуска. И теперь я чувствую себя тупым из-за того, что упускаю из виду такую ​​простую задачу. :) Мне действительно нужна была вторая пара глаз, так как я не привык к такому беспорядку в графическом интерфейсе. Спасибо Эйланеск! - person datguy.dev; 31.05.2017