【问题标题】:QComboBox.currentText() -- PySide vs PyQt4QComboBox.currentText()——PySide 与 PyQt4
【发布时间】:2013-05-17 17:14:07
【问题描述】:

我有一个使用 PySide 的 python 脚本,它运行良好。 但后来我想检查它是否适用于 PyQt4。 在将导入字符串更改为 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 的文本,以构建我稍后使用的点分隔字符串表示。 标记的“>>”行是问题发生的地方 - 突然,“x”对象永远不会是空字符串,就像使用 PySide 库时一样。但如果 self.combo[i] 为空,则它应该是空的。

我搜索了 SO 存档并找到了这个 answer 但无法使用它。 请告知如何解决此问题。

【问题讨论】:

    标签: pyqt4 pyside qstring qcombobox


    【解决方案1】:

    您需要将您的x 值转换为各种字符串。像

    curr_query.append(str(x))
    

    应该可以解决问题。

    【讨论】:

    • 问题是 'x' 从来不是空字符串,所以这段代码甚至不能工作。 if 条件是焦点,因为 PyQt4 是 QString,而 PySide 是 unicode 字符串。不知何故,QString 的 "if x:" 永远不会是真的。
    • 看来这个问题对我来说更普遍,我在这里做了更多的测试并注意到这种行为对于我从 QComboBox.currentText() 读取的其他程序来说很常见。就是把文本值转换成str(),没错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2013-03-08
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多