Pyqt5学习笔记三--菜单栏、工具栏、状态栏

磊落不羁 by:磊落不羁 分类:pyQt5 时间:1年前 阅读:1374 评论:0

pyqt5 学习笔记

三、菜单、工具栏和状态栏

1、菜单

在PyQt5中,菜单栏使用QMenuBar类表示,它分为两部分:主菜单和菜单项,其中,主菜单被显示为一个QMenu类,而菜单项则使用QAciton类表示。一个QMenu中可以包含任意多个QAction对象,也可以包含另外的QMenu,用来表示级联菜单。

在PyQt5窗口中创建菜单时,需要QMenuBar类、QMenu类和QAction类,创建一个菜单,基本上就是使用这3个类完成.

1.QMenuBar类

QMenuBar类是所有窗口的菜单栏,用户需要在此基础上添加不同的QMenuQAction,创建菜单栏有两种方法,分别是QMenuBar类的构造方法或者MainWindow对象的menuBar()方法。

self.menuBar = QtWidgets.QMenuBar(MainWindow) #第一种定义
self.menuBar = MainWindow.menuBar()#第二种定义

image-20221222202803877

2.QMenu类

QMenu类表示菜单栏中的菜单,可以显示文本和图标,但是并不负责执行操作,类似Label的作用。

image-20221222202850270

3.QAction类

PyQt5将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。

image-20221222202924542

QAction类有一个常用的信号triggered,用来在单击菜单项时发射。

使用PyQt5中的菜单时,只有QAction菜单项可以执行操作,QMenuBar菜单栏和QMenu菜单都是不会执行任何操作的,这点一定要注意,这与其他语言的窗口编程有所不同。

4、添加和删除菜单

5、为菜单设置快捷键

为菜单设置快捷键有两种方法,一种是在输入菜单文本时设置,一种使用setShortcut()方法设置,输入菜单文本时设置快捷键,只需要在文本中输入“&+字母”的形式即可,使用setShortcut()方法设置快捷键时,只需要输入相应的快捷组合键即可。

image-20221222203311794

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

6、为菜单设置图标

为菜单设置图标需要使用setIcon()方法,该方法要求有一个QIcon对象作为参数。

  icon = QtGui.QIcon()
  icon.addPixmap(QtGui.QPixmap("images/new.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  self.actionxinjian.setIcon(icon)

image-20221222203352865

7、菜单的功能实现

在单击菜单项时,可以触发其triggered信号,通过为该信号关联槽函数,可以实现相应的菜单项功能。

self.menu.triggered[QtWidgets.QAction].connect(self.getmenu)

如果每个菜单项实现的功能不同,还可以单独为每个菜单项绑定triggered信号

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

image-20221222203636397

2、工具栏

工具栏主要为窗口应用程序提供一些常用的快捷按钮、操作等。在PyQt5中,用QToolBar类表示工具栏。

1、工具栏类:QToolBar

QToolBar类表示工具栏,它是一个由文本按钮、图标或者其他小控件组成的可移动面板,通常位于菜单栏下方。

image-20221222203732325

单击工具栏中的按钮时,会发射actionTriggered信号,通过为该信号关联相应的槽函数,即可实现工具栏的相应功能。

2、添加工具栏

在PyQt5的Qt Designer设计器中创建一个Main Window窗口,一个窗口中可以有多个工具栏,添加工具栏非常简单,单击右键,在弹出的快捷菜单中选择“Add Tool Bar”即可.

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

除了使用QToolBar类的构造函数创建工具栏之外,还可以直接使用MainWindow对象的addToolBar()方法进行添加

MainWindow.addToolBar("toolBar")

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

为工具栏添加图标按钮,需要用到addAction()方法,需要在该方法中传入一个QIcon对象,用来指定按钮的图标和文本;另外,工具栏中的按钮默认只显示图标,可以通过setToolButtonStyle()方法设置为既显示图标又显示文本。

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

image-20221222204350435

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

一次为工具栏添加多个图标按钮需要用到addActions()方法,需要在该方法中传入一个Iterable迭代器对象,对象中的元素必须是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添加到工具栏中

5、向工具栏中添加其他控件

除了使用QAction对象向工具栏中添加图标按钮之外,PyQt5还支持向工具栏中添加标准控件,如常用的Label、LineEdit、ComboBox、CheckBox等,这需要用到QToolBar对象的addWidget()方法。

6、设置工具栏按钮的大小

工具栏中的图标按钮默认大小是24×24,但在使用时,根据实际的需要,对工具栏按钮大小的要求也会有所不同,这时可以使用setIconSize()方法改变工具栏按钮的大小。

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

image-20221222204718551

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

在单击工具栏中的按钮时,可以触发其actionTriggered信号,通过为该信号关联相应槽函数,可以实现工具栏的相应功能。

单击工具栏中的QAction对象默认会发射actionTriggered信号,但是,如果为工具栏添加了其他控件,并不会发射actionTriggered信号,而是会发射它们自己特有的信号。例如,在上面工具栏中添加的ComboBox下拉列表,在选择下拉列表中的项时,会发射其本身的currentIndexChanged信号。

3、状态栏

状态栏通常放在窗口的最底部,用于显示窗口上的一些对象的相关信息或者程序信息,例如,显示当前登录用户、实时显示登录时间、显示任务执行进度等,在PyQt5中用QStatusBar类表示状态栏。

1、状态栏类:QStatusBar

QStatusBar类表示状态栏,它是一个放置在窗口底部的水平条。

image-20221222204936545

QAction类有一个常用的信号triggered,用来在单击菜单项时发射。

2、添加状态栏

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

3、向状态栏中添加控件

PyQt5支持向状态栏中添加标准控件,如常用的LabelComboBoxCheckBoxProgressBar等,这需要用到QStatusBar对象的addWidget()方法。

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

在状态栏中显示临时信息,需要使用QStatusBar对象的showMessage()方法,该方法中有两个参数,第一个参数为要显示的临时信息内容,第二个参数为要显示的时间,以毫秒为单位,但如果设置该参数为0,则表示一直显示。

self.statusbar.showMessage('当前登录用户:mr',0)  # 在状态栏中显示临时信息 

默认情况下,状态栏中的临时信息和添加的控件不能同时显示,否则会发生覆盖重合的情况。

image-20221222205541565

要解决该问题,可以使用addPermanentWidget()方法向状态栏中添加控件。

删除临时信息使用QStatusBar对象的clearMessage()方法

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

image-20221222211709306

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

class Ui_MainWindow(QMainWindow):
    def __init__(self):
        super(Ui_MainWindow, self).__init__()
        self.setupUi()
    def setupUi(self):
        self.setObjectName("MainWindow")
        self.setWindowTitle("这是一个窗体")
        self.resize(480,300)
        #设置状态栏
        self.statusBar=QStatusBar()
        self.statusBar.setObjectName('statusBar2')
        self.setStatusBar(self.statusBar)
        # 设置时间和信号
        timer=QtCore.QTimer(self)
        timer.timeout.connect(self.showtime)
        timer.start()

    def showtime(self): #第一个函数
        datetime=QtCore.QDateTime.currentDateTime()
        text=datetime.toString("yy-MM-dd HH:mm:ss")
        self.statusBar.showMessage('当前时间:'+text,0)
        self.retranslateUI() #第二个函数
        QMetaObject.connectSlotsByName(self)
    def retranslateUI(self):
        _translate=QCoreApplication.translate   
        self.setWindowTitle(_translate("mainwindows","mainwindows"))

if __name__=='__main__':
    app=QApplication(sys.argv)
    win=Ui_MainWindow()
    win.show()
    sys.exit(app.exec_())

上面代码中用到了PyQt5中的QTimer类,该类是一个计时器类,它最常用的两个方法是start()方法和stop()方法,其中,start()方法用来启动计时器,参数以秒为单位,默认为1秒;stop()方法用来停止计时器。另外,QTimer类还提供了一个timeout信号,在执行定时操作时发射该信号。

非特殊说明,本文版权归原作者所有,转载请注明出处

本文地址:http://php.liulei.com.cn/?type=acticle&id=68

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址

TOP