check menu 就是让menu菜单的子选项的一个QAction变得可以选择,并且在选择前和选择后能处理不同的事件。
有两种方法创造可以选择的QAction:
第一种是在QAction的构造函数里添加checkable=True参数
第二种就是用实例化后的QAction对象调用它的setCheckable(True)方法。
注意只有子QAction才可以添加是否可以选中的功能,子菜单是不行的。
代码:
# coding='utf-8'
from PyQt5.QtWidgets import QMainWindow, QApplication, QAction
import sys
class Gui(QMainWindow):
def __init__(self):
super().__init__()
self.start()
def start(self):
# 创建成类属性的status_bar只是为了方便在类方法之间通信
self.status_bar = self.statusBar()
# 最初进入的时候状态栏显示的内容
self.status_bar.showMessage('准备好啦!')
# 创建主菜单,现在没添加任何菜单,暂时没有用
menu_bar = self.menuBar()
# 在主菜单的基础上添加一个菜单,这将返回一个菜单对象
# 同时这个菜单对象才是最终展现出来的菜单
view_menu = menu_bar.addMenu('View')
# 创建QAciton事件,这些创建的事件通常都是和菜单,toolbar等来绑定
view_action = QAction('显示状态栏', self)
# 当触发这个QAction事件后将左下角状态栏设置成这样的
view_action.setStatusTip('我是状态栏')
# 利用两种之一的方法将菜单下的这个QAciton事件变得可以选择
view_action.setCheckable(True)
# 是初始时候是选择上的
view_action.setChecked(True)
# 当点击这个QAction事件后触发self.f回调函数,\
# 此时会将是否选中作为参数传递给self.f
view_action.triggered.connect(self.f)
# 给在主菜单基础上建立的菜单绑定这个QAciton事件\
# (注意主菜单是没有任何用的,必须要用在主菜单基础上建立的子菜单)
view_menu.addAction(view_action)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Check menu')
self.show()
# 这个是一个回调函数,参数state表示QAction事件是否被选中
def f(self, state):
if state:
self.status_bar.show()
else:
self.status_bar.hide()
win = QApplication(sys.argv)
gui = Gui()
sys.exit(win.exec_())
网友评论