Pyqt5学习笔记三--菜单栏、工具栏、状态栏
pyqt5 学习笔记
三、菜单、工具栏和状态栏
1、菜单
在PyQt5中,菜单栏使用QMenuBar
类表示,它分为两部分:主菜单和菜单项,其中,主菜单被显示为一个QMenu
类,而菜单项则使用QAciton
类表示。一个QMenu
中可以包含任意多个QAction
对象,也可以包含另外的QMenu
,用来表示级联菜单。
在PyQt5窗口中创建菜单时,需要QMenuBar类、QMenu类和QAction类,创建一个菜单,基本上就是使用这3个类完成.
1.QMenuBar类
QMenuBar
类是所有窗口的菜单栏,用户需要在此基础上添加不同的QMenu
和QAction
,创建菜单栏有两种方法,分别是QMenuBar
类的构造方法或者MainWindow
对象的menuBar()
方法。
self.menuBar = QtWidgets.QMenuBar(MainWindow) #第一种定义
self.menuBar = MainWindow.menuBar()#第二种定义
2.QMenu类
QMenu类表示菜单栏中的菜单,可以显示文本和图标,但是并不负责执行操作,类似Label的作用。
3.QAction类
PyQt5将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。
QAction类有一个常用的信号triggered,用来在单击菜单项时发射。
使用PyQt5中的菜单时,只有QAction菜单项可以执行操作,QMenuBar菜单栏和QMenu菜单都是不会执行任何操作的,这点一定要注意,这与其他语言的窗口编程有所不同。
4、添加和删除菜单
5、为菜单设置快捷键
为菜单设置快捷键有两种方法,一种是在输入菜单文本时设置,一种使用setShortcut()方法设置,输入菜单文本时设置快捷键,只需要在文本中输入“&+字母”的形式即可,使用setShortcut()方法设置快捷键时,只需要输入相应的快捷组合键即可。
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)
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)
2、工具栏
工具栏主要为窗口应用程序提供一些常用的快捷按钮、操作等。在PyQt5中,用QToolBar类表示工具栏。
1、工具栏类:QToolBar
QToolBar类表示工具栏,它是一个由文本按钮、图标或者其他小控件组成的可移动面板,通常位于菜单栏下方。
单击工具栏中的按钮时,会发射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
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)) # 设置工具栏图标按钮的大小
7、工具栏的单击功能实现
在单击工具栏中的按钮时,可以触发其actionTriggered
信号,通过为该信号关联相应槽函数,可以实现工具栏的相应功能。
单击工具栏中的
QAction
对象默认会发射actionTriggered
信号,但是,如果为工具栏添加了其他控件,并不会发射actionTriggered
信号,而是会发射它们自己特有的信号。例如,在上面工具栏中添加的ComboBox
下拉列表,在选择下拉列表中的项时,会发射其本身的currentIndexChanged
信号。
3、状态栏
状态栏通常放在窗口的最底部,用于显示窗口上的一些对象的相关信息或者程序信息,例如,显示当前登录用户、实时显示登录时间、显示任务执行进度等,在PyQt5中用QStatusBar类表示状态栏。
1、状态栏类:QStatusBar
QStatusBar类表示状态栏,它是一个放置在窗口底部的水平条。
QAction
类有一个常用的信号triggered,用来在单击菜单项时发射。
2、添加状态栏
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
3、向状态栏中添加控件
PyQt5
支持向状态栏中添加标准控件,如常用的Label
、ComboBox
、CheckBox
、ProgressBa
r等,这需要用到QStatusBa
r对象的addWidget()
方法。
4、在状态栏中显示和删除临时信息
在状态栏中显示临时信息,需要使用QStatusBar对象的showMessage()方法,该方法中有两个参数,第一个参数为要显示的临时信息内容,第二个参数为要显示的时间,以毫秒为单位,但如果设置该参数为0,则表示一直显示。
self.statusbar.showMessage('当前登录用户:mr',0) # 在状态栏中显示临时信息
默认情况下,状态栏中的临时信息和添加的控件不能同时显示,否则会发生覆盖重合的情况。
要解决该问题,可以使用addPermanentWidget()
方法向状态栏中添加控件。
删除临时信息使用QStatusBar
对象的clearMessage()
方法
5、在状态栏中实时显示当前时间
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信号,在执行定时操作时发射该信号。
评论列表
发表评论