菜单、工具栏和状态栏

菜单、工具栏和状态栏

一、菜单

1.菜单基础类

(1)QMenuBar类

创建菜单栏的两种方法

#QMenuBar类构造方法
#MainWindow对象的menuBar()方法
self.menuBar = QtWidgets.QMenuBar(MainWindow)
self.menuBar = MainWindow.menuBar()

在这里插入图片描述

(2)QMenu类

在这里插入图片描述

(3)QAction类

在这里插入图片描述
QAction类有一个常用信号triggered,用来在单击菜单项时发射

注意: 只有QAction菜单项可以执行操作,QMenuBar菜单栏和QMenu菜单都不会执行任何操作

2.添加和删除菜单

当使用Qt Designer设计器创建一个MainWindow窗口时,窗口中默认有一个菜单栏和状态栏,如图所示:
默认图片
1.删除菜单
在这里插入图片描述
2.添加菜单
在这里插入图片描述

3.设置菜单项

在这里插入图片描述

4.为菜单设置快捷键

(1)在输入菜单文本时设置
为文本中输入“&+字母”
eg:输入"(&N)",使用<Alt+N>调用
(2)使用setShortcut()方法设置
只需要输入相应的快捷键即可

self.actionxinjian.setShortcut("Ctrl+N")

5.为菜单设置图标

icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(img/1.jpg),QtGui.QIcon.Normal,QtGui.QIcon.Off)
self.actionxinjian.setIcon(icon)

6.菜单的功能实现

单击菜单项弹出信息提示框

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(500,400)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        #self.menuBar = MainWindow.menuBar()
        #添加菜单栏
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 500,23))
        self.menuBar.setObjectName("menuBar")
        #添加“文件”菜单
        self.menu = QtWidgets.QMenu(self.menuBar)
        self.menu.setObjectName("menu")
        self.menu.setTitle("文件")
        #添加“编辑”菜单
        self.menu_2 = QtWidgets.QMenu(self.menuBar)
        self.menu_2.setObjectName("menu")
        self.menu_2.setTitle("编辑")
        MainWindow.setMenuBar(self.menuBar)
        #添加“新建”菜单项
        self.actionxinjian = QtWidgets.QAction(MainWindow)
        self.actionxinjian.setEnabled(True) #设置菜单可用
        #为菜单设置图标
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("img/1.ico"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
        self.actionxinjian.setIcon(icon)
        #设置菜单为windows快捷键
        self.actionxinjian.setShortcutContext(QtCore.Qt.WindowShortcut)
        self.actionxinjian.setIconVisibleInMenu(True) #图标可见
        self.actionxinjian.setObjectName("actionxinjian")
        self.actionxinjian.setText("新建(&N)")#菜单文本
        self.actionxinjian.setIconText("新建")#图标文本
        self.actionxinjian.setToolTip("新建")#提示文本
        self.actionxinjian.setShortcut("Ctrl+N")#设置快捷键

        #添加“打开”菜单项
        self.actiondakai = QtWidgets.QAction(MainWindow)
        #为菜单设置图标
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("img/2.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actiondakai.setIcon(icon1)
        # 设置菜单为windows快捷键
        self.actiondakai.setShortcutContext(QtCore.Qt.WindowShortcut)
        self.actiondakai.setIconVisibleInMenu(True)  # 图标可见
        self.actiondakai.setObjectName("actiondakai")
        self.actiondakai.setText("打开(&O)")  # 菜单文本
        self.actiondakai.setIconText("打开")  # 图标文本
        self.actiondakai.setToolTip("打开")  # 提示文本
        self.actiondakai.setShortcut("Ctrl+O")  # 设置快捷键

        # 添加“关闭”菜单项
        self.actionguanbi = QtWidgets.QAction(MainWindow)
        # 为菜单设置图标
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("img/3.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionguanbi.setIcon(icon2)
        # 设置菜单为windows快捷键
        self.actionguanbi.setShortcutContext(QtCore.Qt.WindowShortcut)
        self.actionguanbi.setIconVisibleInMenu(True)  # 图标可见
        self.actionguanbi.setObjectName("actionguanbi")
        self.actionguanbi.setText("关闭(&M)")  # 菜单文本
        self.actionguanbi.setIconText("关闭")  # 图标文本
        self.actionguanbi.setToolTip("关闭")  # 提示文本
        self.actionguanbi.setShortcut("Ctrl+M")  # 设置快捷键
        self.menu.addAction(self.actionxinjian)#“文件”菜单添加“新建”菜单
        self.menu.addAction(self.actiondakai)#“文件”菜单添加“打开”菜单
        self.menu.addSeparator()#添加分割线
        self.menu.addAction(self.actionguanbi)#“文件”菜单添加“关闭”菜单
        #"文件"菜单的菜单项添加到菜单栏中
        self.menuBar.addAction(self.menu.menuAction())
        #“编辑”菜单的菜单项添加到菜单栏中
        self.menuBar.addAction(self.menu_2.menuAction())
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        #为菜单中QAction绑定triggered信号
        self.menu.triggered[QtWidgets.QAction].connect(self.getmenu)

    def getmenu(self,m):
        from PyQt5.QtWidgets import QMessageBox
        QMessageBox.information(MainWindow,"提示","您选择的是"+m.text(),QMessageBox.Ok)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

在这里插入图片描述
在这里插入图片描述

二、工具栏

1.工具栏类:QToolBar

由文本按钮、图标或其他小控件组成的可移动面板,通常位于菜单栏下方
在这里插入图片描述

2.添加工具栏

在这里插入图片描述
对应的python代码如下:

self.toolBar = QtWidgets.QToolBar(MainWindow)
self.toolBar.setObjectName("toolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea,self.toolBar)

还可直接使用MainWindow对象中的addToolBar()方法添加

MainWindow.addToolBar("toolBar")

3.为工具栏添加图标按钮

#设置工具栏中按钮的显示方式为:文字显示在图标下方
self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
self.toolBar.addAction(QtGui.QIcon("img/1.ico"),"新建")

4.一次为工具栏添加多个图标按钮

#创建“打开”按钮对象
self.open = QtWidgets.QAction(QtGui.QIcon("img/2.ico"),"打开")
#创建“关闭”按钮对象
self.close = QtWidgets.QAction(QtGui.QIcon("img/3.ico"),"关闭")
self.toolBar.addActions([self.open,self.close])

5.向工具栏中添加标准控件

#创建一个ComboBox下拉列表控件
self.combobox = QtWidgets.QComboBox()
#定义职位列表
list = ["总经理","副总经理","人事部经理"]
self.combobox.addItems(list) #职位列表添加到ComboBox下拉列表中
self.toolBar.addWidgets(self.combobox) #将下拉列表添加到工具栏中

6.设置工具栏按钮大小

self.toolBar.setIconSize(QtCore.QSize(16,16)) #设置工具栏图标按钮大小

7.实现工具栏的单击功能

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 400)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.toolBar = QtWidgets.QToolBar(MainWindow)
        self.toolBar.setObjectName("toolBar")
        self.toolBar.setMovable(True) #设置工具栏可移动
        self.toolBar.setOrientation(QtCore.Qt.Horizontal) #设置工具栏为水平工具栏
        self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)#设置工具栏中的按钮显示方式:文字显示在图标下方
        self.toolBar.addAction(QtGui.QIcon("img/1.ico"),"新建")
        self.open = QtWidgets.QAction(QtGui.QIcon("img/2.ico"),"打开")
        self.close = QtWidgets.QAction(QtGui.QIcon("img/3.ico"), "关闭")
        self.toolBar.addActions([self.open, self.close])
        # 创建一个ComboBox下拉列表控件
        self.combobox = QtWidgets.QComboBox()
        # 定义职位列表
        list = ["总经理", "副总经理", "人事部经理"]
        self.combobox.addItems(list)  # 职位列表添加到ComboBox下拉列表中
        self.toolBar.addWidget(self.combobox)  # 将下拉列表添加到工具栏中
        MainWindow.addToolBar(QtCore.Qt.BottomToolBarArea, self.toolBar)
        self.toolBar.setIconSize(QtCore.QSize(16, 16))  # 设置工具栏图标按钮大小
        self.combobox.currentIndexChanged.connect(self.showinfo)
        self.toolBar.actionTriggered[QtWidgets.QAction].connect(self.getvalue)

    def getvalue(self,m):
        QMessageBox.information(MainWindow,"提示","您单击了"+m.text(),QMessageBox.Ok)

    def showinfo(self):
        QMessageBox.information(MainWindow,"提示","您选择的职位是:"+self.combobox.currentText(),QMessageBox.Ok)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

在这里插入图片描述
在这里插入图片描述

三、状态栏

1.状态栏类:QStatusBar

在这里插入图片描述

2.删除和添加状态栏

在这里插入图片描述
在这里插入图片描述
创建状态栏代码如下:

self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

3.向状态栏中添加控件

self.label = QtWidgets.QLabel()
self.label.setText("版权所有:xxx")
self.statusbar.addWidgets(self.label)

4.在状态栏中显示和删除临时信息

self.statusbar.showMessage('当前登录用户:mr',0)#显示临时信息
self.statusbar.clearMessage()#清除临时信息

在这里插入图片描述

5.在状态栏中实时显示当前时间

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(442, 407)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)
        timer = QtCore.QTimer(MainWindow)
        timer.timeout.connect(self.showtime)
        timer.start()

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def showtime(self):
        datetime = QtCore.QDateTime.currentDateTime()
        text = datetime.toString("yyyy-MM-dd HH:mm:ss")
        self.statusBar.showMessage('当前日期时间:'+text,0)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

在这里插入图片描述

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值