6

使用 QComboBox 和 pyside,我知道如何连接信号并使用它发送的索引。但是 unicode 参数呢?如果我更喜欢连接到想要组合框中的字符串的东西,这可能吗?

来自: http: //www.pyside.org/docs/pyside/PySide/QtGui/QComboBox.html#PySide.QtGui.QComboBox

所有三个信号都存在于两个版本中,一个带有 PySide.QtCore.QString 参数,一个带有 int 参数。

信号

def activated (arg__1)
def activated (index)

PySide.QtGui.QComboBox.activated(index) 参数: index – PySide.QtCore.int

PySide.QtGui.QComboBox.activated(arg_ 1) 参数:arg _1 – unicode

编辑:一些代码。

le = ComboBoxIpPrefix()
le.currentIndexChanged.connect(lambda x....)

这段代码给了我索引。问题是如何获取文档中提到的 unicode 字符串。

4

2 回答 2

13

我不明白你的问题到底是什么。

有两个版本的QComboBox.activated信号。一个为您提供所选项目的索引,另一个为您提供其文本。

要在 PySide 中选择它们,请执行以下操作:

a_combo_box.activated[int].connect(some_callable)

a_combo_box.activated[str].connect(other_callable)

第二行在 Python 2 中可能不会以这种方式工作,所以strunicode.

请注意,我使用通用(C++)Qt 文档,因为 PySide 文档仍然很模糊:我arg__1到处都看到那些 s ......
“翻译”到 Python 应该不会太难。请记住,它QString变成了str(或unicode在 Python 2 中;顺便说一下,我喜欢让我的代码在所有版本的 Python 上工作,所以我通常在 Py3 和 Py2 中创建一个别名text类型strunicodelong, short, 等变成int; double变成float; QVariant完全避免,它只是意味着可以在那里传递任何数据类型;等等...

于 2012-08-10T13:24:57.520 回答
2

谢谢奥莱普里!当我在 PySide 文档中遇到晦涩的 arg__1 时,您的回答对我有所帮助。

当我测试 combo.currentIndexChanged[str] 和 combo.currentIndexChanged[unicode] 时,每个信号都发送当前索引文本的 unicode 版本。

这是一个演示该行为的示例:

from PySide import QtCore
from PySide import QtGui

class myDialog(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(myDialog, self).__init__(*args, **kwargs)

        combo = QtGui.QComboBox()
        combo.addItem('Dog', 'Dog')
        combo.addItem('Cat', 'Cat')

        layout = QtGui.QVBoxLayout()
        layout.addWidget(combo)

        self.setLayout(layout)

        combo.currentIndexChanged[int].connect(self.intChanged)
        combo.currentIndexChanged[str].connect(self.strChanged)
        combo.currentIndexChanged[unicode].connect(self.unicodeChanged)

        combo.setCurrentIndex(1)

    def intChanged(self, index):
        print "Combo Index: "
        print index
        print type(index)

    def strChanged(self, value):
        print "Combo String:"
        print type(value)
        print value

    def unicodeChanged(self, value):
        print "Combo Unicode String:"
        print type(value)
        print value

if __name__ == "__main__":

    app = QtGui.QApplication([])
    dialog = myDialog()
    dialog.show()
    app.exec_()

结果输出是:

Combo Index
1
<type 'int'>
Combo String
<type 'unicode'>
Cat
Combo Unicode String
<type 'unicode'>
Cat

我还确认 basestring 会抛出错误IndexError: Signature currentIndexChanged(PyObject) not found for signal: currentIndexChanged。PySide 似乎区分int, float(它称为double)、str/ unicode(两者都变为unicode)和bool,但所有其他 python 类型都被解析为PyObject信号签名的目的。

希望对某人有所帮助!

于 2014-02-25T06:07:07.987 回答