Pyqt5自定义菜单栏功能实现

        在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_())

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 PyQt5 中的 QSS(Qt Style Sheets)实现精美的菜单样式。QSS 类似于 CSS,可以定义各种控件的样式,包括菜单。以下是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QAction class Window(QMainWindow): def __init__(self): super().__init__() menubar = QMenuBar(self) self.setMenuBar(menubar) file_menu = menubar.addMenu('文件') new_action = QAction('新建', self) file_menu.addAction(new_action) edit_menu = menubar.addMenu('编辑') cut_action = QAction('剪切', self) edit_menu.addAction(cut_action) # 设置样式 menubar.setStyleSheet(""" QMenuBar { background-color: #333; color: white; } QMenuBar::item { background-color: #333; padding: 4px 10px; } QMenuBar::item:selected { background-color: #555; } QMenu { background-color: #555; border: 1px solid black; } QMenu::item { background-color: #555; padding: 4px 20px; } QMenu::item:selected { background-color: #777; } QAction { color: white; } QAction:selected { background-color: #777; } """) if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_()) ``` 在这个示例中,我们在菜单菜单上设置了背景色、前景色和间距,并使用了一些简单的边框。我们还设置了 QAction 的颜色和选中时的背景色。 当我们运行这个程序时,会显示一个带有精美样式的菜单菜单。你可以根据自己的喜好自定义样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值