Python高级进阶#019 pyqt5菜单menu应用,新建多窗体

简介: Python高级进阶#019 pyqt5菜单menu应用,新建多窗体

知识回顾:



1.掌握的是QCalendarWidget日历控件

2.click点击事件(信号)触发

3.掌握日期的格式化QDate


一、案例:菜单



1.新建第一个窗体

2.一级菜单的配置

3.二级菜单的配置

4.利用菜单功能实现界面跳转,实现一个多窗体的打开

5.利用菜单功能实现温馨提示


效果图


二、开发思路



1.导入类QMainWindow。

2.使用Qmenu菜单类,这个菜单我们可以从窗体本身的方法进行获取。

3.利用Qmenu的功能,来实现多级菜单addAtion这是一个直接产生点击事件的行为;也可以用addMenu功能来增加子菜单。

4.每次都要弹出新窗体,这个新窗体,我们要制作成全局的窗体。

5.使用Qmessagebox来实现一个简单的帮助。


三、开发过程要点



这里的简便方法在哪里?

本例就是运用了QMainWindow本身功能的继承


载入菜单的简单功能

#利用窗体本身有的菜单栏功能进行载入

       mymenu=self.menuBar()

       mymenu.addAction(“新建”)    这里是要新建一个菜单按钮功能

       mymenu.addAction("运行")

       mymenu.addAction("调试")

       mymenu.addAction("帮助")



菜单按钮行为的触发要点

actHelp=QAction("帮助",self)

利用Qaction的triggered信号实现菜单按钮的功能。这个信号也称为“触发”

actHelp.triggered.connect(self.ljyHelp)

mymenu.addAction(actHelp)


帮助按钮的显示内容,通过消息框进行提示。

msgbox=QMessageBox(QMessageBox.Information,"帮助","欢迎加老刘微信selidev交流",QMessageBox.Ok,self)

       msgbox.show()  这里千万不要忘记show出来



子菜单的书写

这里要注意,直接将子菜单写在父级菜单的下方。

这样的好处,更多的也可以帮助我们进行二次理解。

子菜单的添加,通过addMenu功能

mymenu=self.menuBar()

mymenu.addMenu("文件")



子菜单的核心代码

这里要注意,子菜单的写法,是一级一级下来的,并且每一级的书写,都有一个范围对象。

mymenu=self.menuBar()  总菜单栏的返回对象

       fileMenu=mymenu.addMenu(“文件”)    文件菜单的返回对象

       fileMenu.addAction("新建")

       recentFiles=fileMenu.addMenu(“最新的..”)   最新的…菜单项的返回对象

       recentFiles.addAction("文件1")

       recentFiles.addAction("文件2")

       recentFiles.addAction("文件3")



对于新窗体的建议

建议一个窗体就写一个类。那么每一次新的窗体出现的时候,就是实例化这个类。


注意:想要让这个窗体被一直死循环监听,必须要把这个窗体作为程序的全局变量。否则就会出现闪退现象。



新建一个窗体的写法

1.直接写一个自定义的类窗体

2.将这个类窗体先不要show

3.将这个类窗体在main中进行实例化,作为全局变量

4.在槽的行为中,将这个窗体show出来。



新建多个窗体

1.这里的思想要实例化多个窗体,且这些窗体都是全局变量

2.这里我们要考虑使用列表作为全局变量来承载这些窗体对象

3.此时,我们需要在自定义的类中书写show的代码


四、总结强调



1.掌握菜单栏的书写

2.掌握菜单按钮的单击行为跳转功能

3.掌握子菜单的建立

4.掌握多窗体的书写注意点


本节教程源代码:

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QMainWindow,QAction,QMessageBox
class MyClass(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle("刘金玉编程")
        self.setGeometry(300,100,400,300)
        #制作菜单
        #利用窗体本身有的菜单栏功能进行载入
        mymenu=self.menuBar()
        fileMenu=mymenu.addMenu("文件")
        actNewWin=QAction("新建窗体",self)
        actNewWin.triggered.connect(self.myNewWin)
        fileMenu.addAction(actNewWin)
        recentFiles=fileMenu.addMenu("最新的..")
        recentFiles.addAction("文件1")
        recentFiles.addAction("文件2")
        recentFiles.addAction("文件3")
        mymenu.addAction("运行")
        mymenu.addAction("调试")
        actHelp=QAction("帮助",self)
        actHelp.triggered.connect(self.ljyHelp)
        mymenu.addAction(actHelp)
        self.show()
    def myNewWin(self):
        list1.append(MyClass2())
    def ljyHelp(self):
        msgbox=QMessageBox(QMessageBox.Information,"帮助","欢迎加老刘微信selidev交流",QMessageBox.Ok,self)
        msgbox.show()
class MyClass2(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle("编程创造城市http://bcczcs.com")
        self.show()
if __name__=="__main__":
    app=QApplication(sys.argv)
    mc=MyClass()
    list1=[]
    app.exec_()
相关文章
|
2天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
19 1
|
2天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
11 1
Flask框架在Python面试中的应用与实战
|
3天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python构建简单的图像识别应用
本文将介绍如何利用Python语言及其相关库来构建一个简单但功能强大的图像识别应用。通过结合OpenCV和深度学习模型,我们将展示如何实现图像的特征提取和分类,从而实现对图像中物体的自动识别和分类。无需复杂的算法知识,只需一些基本的Python编程技巧,你也可以轻松地创建自己的图像识别应用。
|
5天前
|
数据挖掘 vr&ar Python
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
29 10
|
6天前
|
机器学习/深度学习 数据采集 供应链
从数据到决策:scikit-learn在业务分析中的应用
【4月更文挑战第17天】本文探讨了scikit-learn在业务分析中的应用,包括数据预处理、分类、回归和聚类模型的构建,以及模型评估与优化。通过使用scikit-learn,企业能有效处理数据、预测趋势、客户细分并制定决策,从而提升经营效率和市场策略。随着机器学习的发展,scikit-learn在业务分析领域的潜力将持续释放,创造更多价值。
|
6天前
|
机器学习/深度学习 算法
scikit-learn在回归问题中的应用与优化
【4月更文挑战第17天】本文探讨了scikit-learn在回归问题中的应用,介绍了线性回归、岭回归、SVR和决策树回归等算法,并提出优化策略,包括特征选择、超参数调优、交叉验证和集成学习。通过实践案例展示如何处理房价预测问题,强调了根据问题特点选择合适方法的重要性。
|
6天前
|
算法 Serverless 计算机视觉
SciPy的科学计算库的基础知识与应用
【4月更文挑战第17天】**SciPy**是Python的开源科学计算库,基于NumPy,包含优化、积分、线性代数、信号处理等模块。本文介绍了SciPy的基本使用,如线性代数(矩阵运算、特征值)、优化(最小化问题)、积分以及信号处理(滤波)。安装SciPy可使用`pip install scipy`。此外,还展示了图像处理和常微分方程求解的例子。SciPy是科学计算的重要工具,适用于各种数值问题。参考文献包括SciPy和NumPy官方文档。
|
6天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
6天前
|
Python
Python金融应用编程:衍生品定价和套期保值的随机过程
Python金融应用编程:衍生品定价和套期保值的随机过程
|
7天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
44 0