[英]How to send index to slot with a QMenu
我正在嘗試使用調出QMenu
的QPushButton
來獲得類似QComboBox的行為 。 即,當選擇一個動作時,我想連接到插槽,並讓該插槽打印出所選項目的索引。 相關的類定義:
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
有點工作。 例如,當我按下按鈕1時,它返回:
Menu button -3
這與我使用組合框所獲得的結果非常接近,除了計數似乎以-3而不是0開頭。我以為它將以0開頭,所以我認為我根本沒有訪問索引,但是在玩弄我不了解的力量。
我正在Windows 7的iPython / Anaconda中使用PySide。
根據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
的奇怪負值感到好奇)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.