2013-05-17 2 views
0

У меня есть скрипт 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, но не смог его использовать. Прошу совета, как исправить это.

ответ

1

Вам необходимо преобразовать значения x в строку. Что-то вроде

curr_query.append(str(x)) 

должен сделать трюк.

+0

Проблема в том, что «x» никогда не является пустой строкой, поэтому этот код даже не работает. Условие if находится в фокусе, потому что для PyQt4 это QString, а для PySide это строка в Юникоде. И как-то, «если x:» для QString никогда не будет истинным. –

+0

Кажется, проблема для меня более общая, я сделал больше тестов здесь и заметил, что это поведение является общим для моих других процедур, которые читаются из QComboBox.currentText(). Это связано с тем, что для текстового значения значение str() было правильным. –

 Смежные вопросы

  • Нет связанных вопросов^_^