Python& PyQt4:setMenu方法不适用于pushButton对象

时间:2014-02-04 08:10:29

标签: python menu pyqt pyqt4 qpushbutton

我对PyQt很新,我正在开发一个PyQt4 GUI,其按钮定义如下:

self.buttonFormule11=QtGui.QPushButton(self.centralwidget)
self.buttonFormule11.setGeometry(QtCore.QRect(268, 696, 19, 23))
self.buttonFormule11.setObjectName(_fromUtf8("buttonFormule11"))
self.buttonFormule11.setFlat(True) 

我想在它上面设置一个菜单,所以我试图在同一个界面(我没有编程)中遵循其他按钮的相同逻辑:

self.listeWhenDefault = ["Option1", "Option2", "Option3"] 
self.MenuWhenIndicateur = QtGui.QMenu(self.centralwidget)
for option in self.listeWhenDefault:
    checkBox = QtGui.QRadioButton(option,self.MenuWhenIndicateur)
    checkableAction = QtGui.QWidgetAction(self.MenuWhenIndicateur)
    checkableAction.setDefaultWidget(checkBox)
    self.MenuWhenIndicateur.addAction(checkableAction)
    QtCore.QObject.connect(checkBox, QtCore.SIGNAL("toggled(bool)"), self.majWhenFormule) #here it should just modify the text shown into a line edit close to the push button, not relevant

self.buttonFormule11.setMenu(self.MenuWhenIndicateur) 

但是,此程序不起作用,因为当我单击pushButton时,没有显示菜单。任何人都可以告诉我,如果我忘了什么/错在哪里?

1 个答案:

答案 0 :(得分:1)

您发布的代码似乎没有任何问题(我测试了它,它对我有用)。所以问题必须存在于代码的其他地方。

但是,我认为示例代码使用了一种奇怪的方法,因此我重新编写它以使用QActionGroup代替。

这是一个简单的演示:

from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Test', self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)
        menu = QtGui.QMenu(self.button)
        group = QtGui.QActionGroup(self.button)
        group.setExclusive(True)
        for index in range(1, 4):
            action = group.addAction('Option%d' % index)
            action.setCheckable(True)
            if index == 1:
                action.setChecked(True)
            menu.addAction(action)
        self.button.setMenu(menu)
        group.triggered.connect(self.handleOptionTriggered)

    def handleOptionTriggered(self, action):
        print(action.text())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 200, 100)
    window.show()
    sys.exit(app.exec_())