在Pyqt中其实自带了菜单栏与功能栏,但这两个功能只能放于顶部,无法做到自定义的局部功能,因此需用到QMenu()函数结合Action()动作实现自定义。
本次分享仅用于测试,无完整实例。
一、Qt Designer创建窗口
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMenu, QAction
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(320, 170, 75, 23))
self.pushButton.setStyleSheet("QPushButton::menu-indicator{image:none;}")
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "测试"))
注:此部分代码乃Qt生成,其他样式可自行创建。
二、实现菜单栏功能
def setup_ui(self):
menu = QMenu()
action_0 = QAction('新建',parent=menu)
menu.addAction(action_0)
# 绑定菜单事件
# action_0.triggered.connect()
action_1 = QAction('哈哈', parent=menu)
menu.addAction(action_1)
action_2 = QAction('ss', parent=menu)
menu.addAction(action_2)
self.pushButton.setMenu(menu)
注:此步骤如有报错,可尝试一下更改QMenu模块库的引用。此部分模块代码放于Ui_MainWindow类中。
三、查看效果
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget, QMenu, QAction, QApplication
from untitled import Ui_MainWindow
class Test(QWidget):
def __init__(self):
super(Test,self).__init__()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv) # 创建一个QApplication,也就是你要开发的软件app
MainWindow = QtWidgets.QMainWindow() # 创建一个QMainWindow,用来装载你需要的各种组件、控件
ui = Ui_MainWindow() # ui是Ui_MainWindow()类的实例化对象
ui.setupUi(MainWindow) # 执行类中的setupUi方法,方法的参数是第二步中创建的QMainWindow
ui.setup_ui()
MainWindow.show() # 执行QMainWindow的show()方法,显示这个QMainWindow
sys.exit(app.exec_())