2013-05-17 60 views
0

我有一個使用PySide的python腳本,它工作正常。 但後來我想檢查它是否會與PyQt4一起使用。 將輸入字符串更改爲PyQt4後,出現了問題。 錯誤指向對象,如下所示:QComboBox.currentText() - PySide與PyQt4

File "./my_file.py", line 93, in showit 
    curr_query = '.'.join(curr_query) 
TypeError: sequence item 0: expected string, QString found 

從文檔,我可以看到PySide主題方法返回「的unicode」字符串, 但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是一個unicode字符串。不知何故,QString的「if x:」從來都不是真的。 –

+0

看起來問題對我來說更一般,我在這裏做了更多的測試,並注意到這種行爲對於從QComboBox.currentText()讀取的其他過程來說很常見。這涉及到將文本值轉換爲str(),這是正確的。 –