重载的pyside信号(QComboBox)

时间:2012-08-10 12:55:26

标签: signals overloading pyside qcombobox

使用带有pyside的QComboBox,我知道如何连接信号并使用它发送的索引。但是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 - PySide.QtCore.int

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

编辑:一些代码。

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

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

2 个答案:

答案 0 :(得分:12)

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

QComboBox.activated信号有两个版本。 One为您提供所选项目的索引,other one为您提供文字。

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

a_combo_box.activated[int].connect(some_callable)

a_combo_box.activated[str].connect(other_callable)

第二行可能不会在Python 2中以这种方式工作,因此将str替换为unicode

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

答案 1 :(得分:2)

谢谢Oleh Prypin!当我在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

我还确认basetring会抛出错误IndexError: Signature currentIndexChanged(PyObject) not found for signal: currentIndexChanged。 PySide似乎区分intfloat(它指的是double),str / unicode(它们都变为unicode),和bool,但为了信号签名,所有其他python类型都被解析为PyObject

希望能帮助别人!