2012-08-10 39 views
5

在pyside中使用QComboBox,我知道如何连接信号并使用它发送的索引。但是unicode的说法呢?如果我更愿意连接到需要组合框中的字符串的东西,那有可能吗?重载的pyside信号(QComboBox)

来源: 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字符串。

回答

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以这种方式工作,所以替代strunicode

请注意,我用的一般(C++)Qt文档,因为PySide文档还是相当ambigous:我一直在到处看到这些arg__1小号...
“翻译”到Python应该不会太难。请记住QString变成str(或Python2中的unicode;顺便说一下,我喜欢让我的代码在Python的所有版本上都能正常工作,所以我通常在Py2中创建一个别名类型text,即str,即str);在Py2中,unicode; longshort等变为int; double变成float;完全避免了QVariant,这只是意味着任何数据类型都可以在那里传递;等等......

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 

我也证实,即basestring将抛出一个错误IndexError: Signature currentIndexChanged(PyObject) not found for signal: currentIndexChanged。 PySide出现分化intfloat(它指的是作为double),str/unicode(两者成为unicode),和bool,但所有其他Python类型被解析为PyObject对于信号特征的目的。

希望能帮助别人!