如何使qmenu项目可检查pyqt4 python
Posted
技术标签:
【中文标题】如何使qmenu项目可检查pyqt4 python【英文标题】:how to make qmenu item checkable pyqt4 python 【发布时间】:2012-04-29 01:20:09 【问题描述】:如何使我的 qmenu 可检查?
from PyQt4 import QtGui
app = QtGui.QApplication([])
menu = QtGui.QMenu()
menu.addAction('50%')
menu.addAction('100%')
menu.addAction('200%')
menu.addAction('400%')
menu.show()
app.exec_()
【问题讨论】:
您想让QMenu
可检查或操作? AFAIK,QMenu
无法检查。
@Avaris 是的,我希望这些操作是可检查的。
【参考方案1】:
像这样:
from PyQt4 import QtGui
app = QtGui.QApplication([])
w = QtGui.QMainWindow()
menu = QtGui.QMenu("menu", w)
menu.addAction(QtGui.QAction('50%', menu, checkable=True))
menu.addAction(QtGui.QAction('100%', menu, checkable=True))
menu.addAction(QtGui.QAction('200%', menu, checkable=True))
menu.addAction(QtGui.QAction('300%', menu, checkable=True))
menu.addAction(QtGui.QAction('400%', menu, checkable=True))
w.menuBar().addMenu(menu)
w.show()
app.exec_()
或没有单选按钮:
from PyQt4 import QtGui
app = QtGui.QApplication([])
w = QtGui.QMainWindow()
menu = QtGui.QMenu("menu", w)
ag = QtGui.QActionGroup(w, exclusive=True)
a = ag.addAction(QtGui.QAction('50%', w, checkable=True))
menu.addAction(a)
a = ag.addAction(QtGui.QAction('100%', w, checkable=True))
menu.addAction(a)
a = ag.addAction(QtGui.QAction('200%', w, checkable=True))
menu.addAction(a)
a = ag.addAction(QtGui.QAction('300%', w, checkable=True))
menu.addAction(a)
a = ag.addAction(QtGui.QAction('400%', w, checkable=True))
menu.addAction(a)
w.menuBar().addMenu(menu)
w.show()
app.exec_()
【讨论】:
非常感谢您提供的所有示例答案。这解决了我的问题。 :) 我要补充一点,您可以使用myaction = QtGui.QAction('50%', menu, checkable=True)
,然后使用menu.addAction(myaction)
,最后使用myaction.isChecked()
来获取检查状态。
对于遇到此线程的任何人,QActionGroup 是exclusive by default,而您不需要需要说exclusive=True
【参考方案2】:
我建议在紧凑的第一个解决方案中添加几行来显示按钮的实际使用:
from PyQt4 import QtGui, QtCore
def isChecked():
""" Prints selected menu labels. """
[print(action.text()) for action in menu.actions() if action.isChecked()]
app = QtGui.QApplication([])
w = QtGui.QMainWindow()
menu = QtGui.QMenu("menu", w)
menu.addAction(QtGui.QAction('50%', menu, checkable=True))
menu.addAction(QtGui.QAction('100%', menu, checkable=True))
menu.addAction(QtGui.QAction('200%', menu, checkable=True))
menu.addAction(QtGui.QAction('400%', menu, checkable=True))
menu.triggered.connect(isChecked)
w.menuBar().addMenu(menu)
w.show()
app.exec_()
【讨论】:
【参考方案3】:PyQt5
的子菜单示例from PyQt5.QtWidgets import (
QMenu,
QAction,
)
menu = QMenu()
color_menu = QMenu('Player color')
white_color = QAction('White', checkable=True)
black_color = QAction('Black', checkable=True)
color_menu.addAction(white_color)
color_menu.addAction(black_color)
play_action = QAction('Start game')
menu.addAction(play_action)
menu.addMenu(color_menu)
【讨论】:
以上是关于如何使qmenu项目可检查pyqt4 python的主要内容,如果未能解决你的问题,请参考以下文章
QMenu mousePressEvent 阻碍了 QAction 切换
如果 QMenu 弹出,如何使小部件在光标位于其上时接收 QMouseEvent?