菜单、工具栏和状态栏
菜单、工具栏和状态栏
一、菜单
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_())