使用带有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字符串。
答案 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
; unicode
,long
等成为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似乎区分int
,float
(它指的是double
),str
/ unicode
(它们都变为unicode
),和bool
,但为了信号签名,所有其他python类型都被解析为PyObject
。
希望能帮助别人!