目录
概述
1. 菜单
2. 工具栏
3. 状态栏
菜单是窗口应用程序的主要用户界面要素,工具栏为应用程序提供了操作系统的界面,状态栏则会显示系统的一些状态信息。
创建菜单栏时,需要用到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_()) # 程序关闭时退出进程
工具栏主要提供一些常用的快捷按钮、操作等,使用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_())
实例:在状态栏中显示当前时间
# -*- 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_())