У меня есть скрипт python с использованием PySide, и он отлично работает. Но потом я решил проверить, сработает ли он с PyQt4. И после изменения строк импорта в PyQt4 все пошло не так. Точки ошибок на эту тему, как указано ниже:QComboBox.currentText() - PySide vs PyQt4
File "./my_file.py", line 93, in showit
curr_query = '.'.join(curr_query)
TypeError: sequence item 0: expected string, QString found
Из документов я могу видеть, что «Юникод» PySide предмет метод возвращает строку, но PyQt4 один возвращает QString объект. Игра с str(), str() и т. Д., Похоже, не выполняет эту работу. Вот код функции:
def showit(self, idx):
curr_query = []
for i in xrange(idx+1):
>> x = self.combo[i].currentText()
>> if x:
curr_query.append(x)
else:
break
curr_query = '.'.join(curr_query)
Это читает текст из набора QCombobox'es построить до дота-sepated строкового представления, которое я использую позже. Помеченные строки «>>» возникают там, где проблема возникает - объект «x» никогда не является пустой строкой, как это было при использовании библиотеки PySide. Но ожидается, что он будет пустым, если есть пустой self.combo [i].
Я искал архив SO и нашел это answer, но не смог его использовать. Прошу совета, как исправить это.
Проблема в том, что «x» никогда не является пустой строкой, поэтому этот код даже не работает. Условие if находится в фокусе, потому что для PyQt4 это QString, а для PySide это строка в Юникоде. И как-то, «если x:» для QString никогда не будет истинным. –
Кажется, проблема для меня более общая, я сделал больше тестов здесь и заметил, что это поведение является общим для моих других процедур, которые читаются из QComboBox.currentText(). Это связано с тем, что для текстового значения значение str() было правильным. –