1

我正在尝试使用QComboBox 来获得类似 QComboBox的行为。Namely, when an action is selected, I want to connect to a slot, and for the slot to print out the index of the selected item. 相关类定义:QPushButtonQMenu

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。

4

1 回答 1

2

根据 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)。

于 2014-06-29T00:19:08.287 回答