PyQt5之菜单栏和工具栏

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、下面我们来完善这些功能:

  1. 首先使用Qt Designer新建一个Widget窗口,命名为“first1”,并在这个窗口中放入一个Line Edit ,将其text属性值改为“我是子窗口!!”。
  2. 打开上面保存的“first”文件,在其主窗口里面添加一个GridLayout布局管理器,待会将子窗口放进去。
  3. 最后将两个文件都转换为.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_())

运行效果如下:

在这里插入图片描述

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PyQt5中,可以使用QActionGroup类来实现菜单栏的单选功能。下面是一个示例代码: ```python from PyQt5.QtWidgets import QMainWindow, QApplication, QAction, QMenu, QActionGroup import sys class MenuBarDemo(QMainWindow): def __init__(self): super(MenuBarDemo, self).__init__() bar = self.menuBar() file = bar.addMenu("选择") group = QActionGroup(self) action1 = QAction("选项1", self) action1.setCheckable(True) action1.setChecked(True) action1.triggered.connect(self.actionTriggered) action2 = QAction("选项2", self) action2.setCheckable(True) action2.triggered.connect(self.actionTriggered) action3 = QAction("选项3", self) action3.setCheckable(True) action3.triggered.connect(self.actionTriggered) group.addAction(action1) group.addAction(action2) group.addAction(action3) file.addAction(action1) file.addAction(action2) file.addAction(action3) def actionTriggered(self): action = self.sender() print("选中了:", action.text()) if __name__ == '__main__': app = QApplication(sys.argv) mainWin = MenuBarDemo() mainWin.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个菜单栏,并向其添加了一个"选择"的菜单项。然后,我们创建了一个QActionGroup对象,用于管理菜单项的单选功能。 接着,我们创建了三个QAction对象,并将它们添加到QActionGroup中。然后,我们将这些QAction对象添加到"选择"菜单中。 当用户选中某个菜单项时,会触发actionTriggered槽函数,并打印出选中的菜单项的文本。 这样,我们就实现了菜单栏的单选功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【pyqt5学习】——菜单栏(QMenu())、工具栏QToolBar学习](https://blog.csdn.net/qq_45769063/article/details/124992097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [PyQt5学习(一):布局管理+信号和槽关联+菜单栏工具栏+打包资源包](https://blog.csdn.net/qq_45802081/article/details/117534692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值