我对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时,没有显示菜单。任何人都可以告诉我,如果我忘了什么/错在哪里?
答案 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_())