我正在尝试QComboBox-like behavior使用引发QPushButton
的{{1}}。即,当选择一个动作时,我想连接到一个插槽,并为插槽打印出所选项目的索引。相关班级定义:
QMenu
有点有效。例如,当我按下按钮1时,它返回:
from PySide import QtGui, QtCore
class PushIt(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
menBut=self.makeQMenuButton()
self.show()
def makeQMenuButton(self):
button=QtGui.QPushButton("Men...you!", self)
pushMenu=QtGui.QMenu(button)
#Set up each element of menu
menBut1=pushMenu.addAction("Select me!")
menBut2=pushMenu.addAction("Don't select me!")
#What to do when each one is activated
menBut1.activated[int].connect(self.menButSlot)
menBut2.activated[int].connect(self.menButSlot)
button.setMenu(pushMenu)
return button
@QtCore.Slot(int)
def menButSlot(self, menDat):
print "Menu button ", menDat
这与我使用组合框得到的结果很接近,除了计数似乎从-3开始而不是0.我假设它将从0开始,所以我认为我根本没有访问索引,但是我正在玩弄我不理解的权力。
我在Windows 7中的iPython / Anaconda中使用PySide。
答案 0 :(得分:1)
根据Pavel Strakhov的评论,QMenu.activated
信号已被弃用。他建议使用QSignalMapper
向插槽发送索引。这很有效,如下:
class PushIt(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
menBut=self.makeQMenuButton()
self.show()
def makeQMenuButton(self):
button=QtGui.QPushButton("Men...you!", self)
#Set up qmenu and its items
pushMenu=QtGui.QMenu(button)
menBut1=pushMenu.addAction("Select me!")
menBut2=pushMenu.addAction("Don't select me!")
button.setMenu(pushMenu)
#set up mapping to create your own indexing scheme
menuMapping=QtCore.QSignalMapper(self)
menuMapping.setMapping(menBut1, 0)
menuMapping.setMapping(menBut2, 1)
menBut1.triggered.connect(menuMapping.map)
menBut2.triggered.connect(menuMapping.map)
menuMapping.mapped[int].connect(self.menButSlot)
return button
@QtCore.Slot(int)
def menButSlot(self, menDat):
print "Home-grown triggered index:", menDat
这完全像我希望的那样(尽管我仍然对我在activated
收到的奇怪否定值感到好奇。)