PyQt5之菜单栏和工具栏
在
MainWindow
主窗口中,主要包含菜单栏、工具栏、任务栏等。这里我们来介绍菜单栏和工具栏的使用。
1、 首先新建一个主窗口,双击菜单栏上的"Type Here"
,输入文字,最后按回车键即可生成菜单。对于一级菜单,可以通过输入“文件(&F)”和“编辑(&E)”来加入菜单的快捷键,如图所示:
(注:最后要按回车键确认菜单的输入)
2、创建子菜单,首先单击一下菜单栏上的“文件”,出现如下图所示,双击"Type Here"
,输入文字,最后按回车键即可生成子菜单,Add Separator
是添加分割线。
子菜单可以通过Action Editor动作编辑器中的 Shortcut 来添加快捷键,双击需要编辑的动作,可以对其它动作进行修改。如果你的右下角没有Action Editor,则可以通过点击菜单栏中的View选择Action Editor。
3、使用Qt Designer默认生成的主窗口中不显示工具栏,可以通过单击鼠标右键来添加工具栏(Tool Bar),在动作编辑器中新建一个actionWin,然后拖到工具栏中。如图:
4、将文件保存之后,转换为.py文件如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'D:\Python--PyQt5--Eric6\first.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
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(530, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 530, 26))
self.menubar.setObjectName("menubar")
self.menu_F = QtWidgets.QMenu(self.menubar)
self.menu_F.setObjectName("menu_F")
self.menu_E = QtWidgets.QMenu(self.menubar)
self.menu_E.setObjectName("menu_E")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(MainWindow)
self.toolBar.setObjectName("toolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.actionNew = QtWidgets.QAction(MainWindow)
self.actionNew.setObjectName("actionNew")
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionClose = QtWidgets.QAction(MainWindow)
self.actionClose.setObjectName("actionClose")
self.actionWin = QtWidgets.QAction(MainWindow)
self.actionWin.setObjectName("actionWin")
self.menu_F.addAction(self.actionNew)
self.menu_F.addAction(self.actionOpen)
self.menu_F.addAction(self.actionClose)
self.menubar.addAction(self.menu_F.menuAction())
self.menubar.addAction(self.menu_E.menuAction())
self.toolBar.addAction(self.actionWin)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.menu_F.setTitle(_translate("MainWindow", "文件(&F)"))
self.menu_E.setTitle(_translate("MainWindow", "编辑(&E)"))
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
self.actionNew.setText(_translate("MainWindow", "新建"))
self.actionNew.setToolTip(_translate("MainWindow", "新建"))
self.actionNew.setShortcut(_translate("MainWindow", "Shift+N"))
self.actionOpen.setText(_translate("MainWindow", "打开"))
self.actionOpen.setShortcut(_translate("MainWindow", "Shift+O"))
self.actionClose.setText(_translate("MainWindow", "关闭"))
self.actionClose.setShortcut(_translate("MainWindow", "Shift+C"))
self.actionWin.setText(_translate("MainWindow", "添加窗口"))
self.actionWin.setToolTip(_translate("MainWindow", "添加窗口"))
5、下面我们来完善这些功能:
- 首先使用Qt Designer新建一个Widget窗口,命名为“first1”,并在这个窗口中放入一个Line Edit ,将其text属性值改为“我是子窗口!!”。
- 打开上面保存的“first”文件,在其主窗口里面添加一个GridLayout布局管理器,待会将子窗口放进去。
- 最后将两个文件都转换为.py文件,写出下面代码最后运行。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
#导入创建主窗口和子窗口的类
from Ui_first import Ui_MainWindow
from Ui_first1 import Ui_Form
class MainWin(QMainWindow,Ui_MainWindow):
def __init__(self):
super(MainWin,self).__init__()
self.setupUi(self)
#生成子窗口
self.child = ChildWin()
#连接打开文件的信号槽
self.actionOpen.triggered.connect(self.openMsg)
#连接关闭主窗口的信号槽
self.actionClose.triggered.connect(self.close)
#连接添加窗体的信号槽
self.actionWin.triggered.connect(self.childShow)
def childShow(self):
#添加子窗口
self.gridLayout.addWidget(self.child)
self.child.show()
def openMsg(self):
#打开文件的槽函数
file,ok = QFileDialog.getOpenFileName(self,"打开","D:/","All Files(*)")
self.statusbar.showMessage(file)
class ChildWin(QtWidgets.QWidget,Ui_Form):
def __init__(self):
super(ChildWin,self).__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWin()
win.show()
sys.exit(app.exec_())
运行效果如下: