如何使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 切换

PyQt4 可检查目录视图

使 QMenu 标签加粗而不影响其子项

如果 QMenu 弹出,如何使小部件在光标位于其上时接收 QMouseEvent?

如何设置 QMenu 中包含的 QActions 的可访问名称

我如何获得 PyQt4.phonon?