PyQt5从入门到实践——Chapter7 菜单、工具栏和状态栏

目录

概述

1. 菜单

2. 工具栏

3. 状态栏


概述

菜单是窗口应用程序的主要用户界面要素,工具栏为应用程序提供了操作系统的界面,状态栏则会显示系统的一些状态信息。

PyQt5从入门到实践——Chapter7 菜单、工具栏和状态栏_第1张图片

1. 菜单

创建菜单栏时,需要用到QMenuBar类,QMenu类和QAction类。

注:只有QAction菜单项可执行操作,其常用的信号是triggered,用来在单击菜单时发射。

实例:单击菜单项弹出信息提示框

完整代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '7.1.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!


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

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(344, 115)
        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, 344, 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_2")
        self.menu_2.setTitle("编辑")
        MainWindow.setMenuBar(self.menuBar)
        # 添加“新建”菜单
        self.actionxinjian = QtWidgets.QAction(MainWindow)
        self.actionxinjian.setEnabled(True) # 设置菜单可用
        # 为菜单设置图标
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("images/new.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("images/open.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actiondakai.setIcon(icon1)
        self.actiondakai.setObjectName("actiondakai")
        self.actiondakai.setText("打开(&O)") # 设置菜单文本
        self.actiondakai.setIconText("打开") # 设置图标文本
        self.actiondakai.setToolTip("打开") # 设置提示文本
        self.actiondakai.setShortcut("Ctrl+O") # 设置快捷键
        # 添加“关闭”菜单
        self.actionclose = QtWidgets.QAction(MainWindow)
        # 为菜单设置图标
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("images/close.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionclose.setIcon(icon2)
        self.actionclose.setObjectName("actionclose")
        self.actionclose.setText("关闭(&C)") # 设置菜单文本
        self.actionclose.setIconText("关闭") # 设置图标文本
        self.actionclose.setToolTip("关闭") # 设置提示文本
        self.actionclose.setShortcut("Ctrl+M") # 设置快捷键

        self.menu.addAction(self.actionxinjian) # 在“文件”菜单中添加“新建”菜单项
        self.menu.addAction(self.actiondakai) # 在“文件”菜单中添加“打开”菜单项
        self.menu.addSeparator() # 添加分割线
        self.menu.addAction(self.actionclose) # 在“文件”菜单中添加“关闭”菜单项

        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)
    #
    #     # 单独为“新建”菜单绑定triggered信号
    #     self.actionxinjian.triggered.connect(self.getmenu)
    #
    # def getmenu(self):
    #     from PyQt5.QtWidgets import QMessageBox
    #     # 使用information()方法弹出信息提示框
    #     QMessageBox.information(MainWindow,"提示","您选择的是"+self.actionxinjian.text(),QMessageBox.Ok)

    def getmenu(self,m):
        # 使用information()方法弹出信息提示框
        QMessageBox.information(MainWindow,"提示","您选择的是"+m.text(),QMessageBox.Ok)

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

if __name__ == '__main__':
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
   ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
   ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
   MainWindow.show() # 显示窗体
   sys.exit(app.exec_()) # 程序关闭时退出进程

2. 工具栏

工具栏主要提供一些常用的快捷按钮、操作等,使用QToolBar类表示。

注:单击工具栏按钮时,可以触发actionTriggered信号关联槽函数

实例:获取单击的工具栏按钮,为工具栏添加相应的事件,提示用户单击了哪个工具栏

完整代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '7.2.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!


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

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(309, 137)
        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("images/new.ico"),"新建") # 为工具栏添加QAction
        # 创建“打开”按钮对象
        self.open = QtWidgets.QAction(QtGui.QIcon("images/open.ico"),"打开")
        # 创建“关闭”按钮对象
        self.close = QtWidgets.QAction(QtGui.QIcon("images/close.ico"), "关闭")
        self.toolBar.addActions([self.open,self.close]) # 将创建的两个QAction到工具栏中
        self.toolBar.setIconSize(QtCore.QSize(16,16)) # 设置工具栏图标按钮的大小
        # 创建一个ComboBox下拉列表控件
        self.combobox = QtWidgets.QComboBox()
        # 定义职位列表
        list = ["总经理", "副总经理", "人事部经理", "财务部经理", "部门经理", "普通员工"]
        self.combobox.addItems(list)  # 将职位列表添加到ComboBox下拉列表中
        self.toolBar.addWidget(self.combobox) # 将下拉列表添加到工具栏中

        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        # 将ComboBox控件的选项更改信号与自定义槽函数关联
        self.combobox.currentIndexChanged.connect(self.showinfo)
        # 为菜单中的QAction绑定triggered信号
        self.toolBar.actionTriggered[QtWidgets.QAction].connect(self.getvalue)

    def getvalue(self,m):
        # 使用information()方法弹出信息提示框
        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__':
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow()
   ui = Ui_MainWindow()
   ui.setupUi(MainWindow)
   MainWindow.show()
   sys.exit(app.exec_())

3. 状态栏

实例:在状态栏中显示当前时间

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '7.3.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(301, 107)
        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)

        # self.label=QtWidgets.QLabel() # 创建一个Label控件
        # self.label.setText('版权所有:吉林省明日科技有限公司') # 设置Label的文本
        # self.statusbar.addWidget(self.label) # 将Label控件添加到状态栏中
        # self.statusbar.showMessage('当前登录用户:mr', 0)  # 在状态栏中显示临时信息

        # self.statusbar.clearMessage() # 清除状态栏中的临时信息

        timer = QtCore.QTimer(MainWindow) # 创建一个QTimer计时器对象
        timer.timeout.connect(self.showtime) # 发射timeout信号,与自定义槽函数关联
        timer.start() # 启动计时器
    # 自定义槽函数,用来在状态栏中显示当前日期时间
    def showtime(self):
        datetime = QtCore.QDateTime.currentDateTime() # 获取当前日期时间
        text = datetime.toString("yyyy-MM-dd HH:mm:ss") # 对日期时间进行格式化
        self.statusbar.showMessage('当前日期时间:'+text, 0) # 在状态栏中显示日期时间

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

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


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

你可能感兴趣的:(PyQt5从入门到实践,学习笔记,qt,开发语言,qt5,python)