前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python高级进阶#019 pyqt5菜单menu应用,新建多窗体

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

作者头像
刘金玉编程
发布2019-11-12 12:17:54
2.8K0
发布2019-11-12 12:17:54
举报
文章被收录于专栏:编程创造城市

知识回顾:

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.掌握多窗体的书写注意点

本节教程源代码:

代码语言:javascript
复制
import sysfrom 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_()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程创造城市 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档