pyqt5-窗口菜单栏和右键菜单
1、介绍
窗口菜单栏和右键菜单的实现过程中,存在很大程度的相似性,都会使用QMenu和QAction这两类对象。
2、窗口菜单栏
只有QMainWindow类的窗口才可以创建窗口菜单栏,而QWidget和其它窗口则不支持。
def __init__(self):
...
self.window: QMainWindow
menuBar = self.window.menuBar()
file = QMenu('文件', menuBar)
file.addAction('新建')
file.addAction('打开')
opt = QMenu('操作', menuBar)
opt.addAction('选择')
opt.addAction('切换')
menuBar.addMenu(file)
menuBar.addMenu(opt)
menuBar.triggered.connect(self.menuBar_triggered)
def menuBar_triggered(self, act: QAction):
if act.text() == '':
pass
3、右键菜单
基本上所有组件都支持右键菜单的实现。
from PyQt5.QtCore import Qt
def __init(self):
...
# 右键菜单
self.window.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
self.window.treeWidget.customContextMenuRequested.connect(self.treeWidget_rightMenu)
def treeWidget_rightMenu(self, pos):
menu = QMenu(self.window.plainTextEdit)
menu.addAction('新建连接')
menu.triggered.connect(self.treeWidget_rightMenu_triggered)
menu.exec_(QCursor.pos())
def treeWidget_rightMenu_triggered(self, act: QAction):
if act.text() == '新建连接':
pass
- 注意Qt类的准确引入
- 实际上,右键菜单中由右键触发只是习惯而言,也可以基于单击左键或其它事件等形式触发菜单
from PyQt5.QtCore import Qt
def __init(self):
...
# 点击按钮,生成菜单
self.window.pushButton.clicked.connect(self.treeWidget_rightMenu)
def treeWidget_rightMenu(self, pos=None):
menu = QMenu(self.window)
menu.addAction('新建连接')
menu.triggered.connect(self.treeWidget_rightMenu_triggered)
menu.exec_(QCursor.pos())
def treeWidget_rightMenu_triggered(self, act: QAction):
if act.text() == '新建连接':
pass