003.PyQt5_程序基本结构分析

PyQt5 程序基本结构分析
  • 导入需要的包和模块

    # 导入系统包
    import sys
    # PyQt5.Qt把常用的类汇总在一起
    from PyQt5.Qt import *
    
  • 创建一个应用程序

    # app是变量名,sys.argv帮助我们在用命令行执行程序时传递参数
    app = QApplication(sys.argv)
    print(app.arguments())
    
  • 首先从名字上看:argv 的意思就是参数
    parameter 是指函数定义中的参数,而 argument 指的是函数调用时的实际参数。

  • 测试 sys.argv 有什么作用?

    import sys
    args = sys.argv
    print(args)
    
  • 代码有两种执行方式:一种是右击,执行;另一种是命令行 python + *.py

  • 右击执行的结果: 在这里插入图片描述

  • 命令行(下面Terminal)执行的结果:
    在这里插入图片描述

  • 打印出的结果都是文件所在路径,结果类型是列表(有‘[ ]’)

  • 在执行脚本时可以通过命令行传递参数,比如:在这里插入图片描述

  • 故通过 python 执行脚本文件时可以通过 sys.argv 来接受传递的参数,从而执行不同的业务逻辑,比如:

    import sys
    args = sys.argv
    print(args)
    
    if args[1] == '1':
        print('唉,好饿啊')
    elif args[1] == '2':
        print('你一点都不饿')
    else:
        print('我也不知道你饿了没有')
    
  • 执行脚本文件输出结果(鼠标右键运行会报错)在这里插入图片描述

  • 控件操作

    # 导入系统包
    import sys
    # PyQt5.Qt把常用的类汇总在一起
    from PyQt5.Qt import *
    
    # app是变量名,sys.argv帮助我们在用命令行执行程序时传递参数
    app = QApplication(sys.argv)
    
    # 创建控件
    window = QWidget()
    # 设置控件(尺寸、位置、样式...),事件、信号的处理
    # 注意空间尺寸不包含标题栏,它的大小指的是下图里的红框部分,同理move所指的控件位置是左上角距离红框左上角的坐标。
    window.setWindowTitle("开始学PyQt5")
    window.resize(500, 500)
    label = QLabel(window)
    label.setText("这是个标签")
    label.move(200, 100)
    # 展示控件
    # 没有父对象控件默认不显示,必须要调用show()才可以
    window.show()
    
    sys.exit(app.exec_())
    

在这里插入图片描述

- 控件可以作为容器,承载其他控件
  • 顶层控件:

    • 如果该控件没有父控件,则认定为是顶层控件(窗口)。系统会自动给窗口包装,即添加一些装饰(标题栏——最小化、最大化、关闭),顶层控件(窗口)具备一些特性(设置标题、图标)
  • 非顶层控件

    • 非顶层控件的设置方法就是:在定义的时候括号内写上父控件的变量名,比如 label = QLabel(window)。
    • 且如果有父控件,那么父控件展示之后,子控件会自动展示(只用 window.show() 不用 label.show())
  • 顶层控件

    import sys
    from PyQt5.Qt import *
    
    
    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle('开始学习PyQt5')
    window.show()
    sys.exit(app.exec_())
    

    在这里插入图片描述

  • 非顶层控件(label = QLabel(window))

    import sys
    from PyQt5.Qt import *
    
    
    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle('开始学习PyQt5')
    window.resize(680, 300)
    
    label = QLabel(window)
    label.setText('这是一个QLabel控件')
    
    window.show()
    sys.exit(app.exec_())
    

    在这里插入图片描述

  • 如果把 label = QLabel(window) 括号内的 window 删掉,则会出现两个窗口,也就是两个顶层控件。

  • PS: label.show() 不可缺少,否则 label 无法显示

    import sys
    from PyQt5.Qt import *
    
    
    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle('开始学习PyQt5')
    window.resize(680, 300)
    
    label = QLabel()
    label.setText('这是一个QLabel控件')
    
    window.show()
    label.show
    sys.exit(app.exec_())
    

    在这里插入图片描述

    • 当控件窗体没有设置标题(setWindowTitle)时,系统会为窗口自动添加标题为 “python”
  • 开始执行应用程序,并进入消息循环

    # 循环是指程序开始执行后无限循环,持续地显示该页面;消息是指循环过程中一直在检测用户的交互信息
    # sys.exit(app.exec_())表示首先执行app.exec_()进入主消息循环,一旦用户点击关闭按钮或是程序崩溃,app.exec_()将该消息上报给系统。
    sys.exit(app.exec_())
    
  • 补充:sys.exit() 与 exec_() 方法

    • 当运行 sys.exit() 时,会出现:
    • Process finished with exit code 0
    • 0 表示正常退出,若出现 1 表示程序出错了,一般伴有 error,若出现 -1 表示被打断退出。
    • exec_() 方法的作用是“进入程序的主循环直到 exit() 被调用”,即让这个程序(可视化界面)保持住显示不会退出。
    • 虽然 Python 的一切也需要调用才能生效,但是一旦被调用就会立即有反应。PyQt 则是类和对象的层层嵌套,需要逐层调用。以前一直以为读过 show() 这个方法之后就会有窗口显示在屏幕上,其实真正让窗口显示出来的并不是它,这一句其实是个界定窗口在何时弹出的“声明”,解释器读取到这里,Application 还没有启动,只是确定了一旦启动,应该在“这个时候”弹出这个窗口。真正让整个程序运转的是 sys.exit(app.exec_()) 里面嵌套的这个 app.exec_() 。
    • exec:执行;exit:退出

  • 重点总结
  • 1、每一个PyQt程序都需要一个应用程序对象。
    • 它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。
    • 它也处理应用程序的初始化和结束,并且提供对话管理。
    • 它也处理绝大多数系统范围和应用程序范围的设置。
  • 2、app.exec_()意思是让程序进入主循环,不要停止。
  • 3、一个没有父对象控件默认不显示,必须要调用show()才可以。
  • 4、一个应用程序中可以显示多个顶级控件。
    • 如果一个Widget没有父控件,则认定为是顶级控件(顶级窗口),有标题栏,可以设置图标,标题,有最大化,最小化,关闭等操作。
    • 如果想要一个控件展示在另外一个控件内部,必须要有父子关系。
    • 如果两个对象为父子关系,那么父对象显示之后,一般子对象会自动显示。父对象关闭后,子对象也会自动关闭
  • 关于app.exec_()
  • app.exec_()就该是QApplication的方法,于是乎去查手册。原来这个exec_()方法的作用是“进入程序的主循环直到exit()被调用”,说白了就是让这个程序运行。
  • 在这方面PyQt和Python有个很大的不同。虽然Python的一切也需要调用才能生效,但是一旦被调用就会立即有反应。PyQt则是类和对象的层层嵌套,需要你逐层调用。以前一直以为读过“show()”这个方法之后就会有窗口显示在屏幕上,其实真正让窗口显示出来的并不是这一句,这一句其实是个界定窗口在何时弹出的“声明”,解释器读取到这里,Application还没有启动,只是确定了一旦启动,应该在“这个时候”弹出这个窗口。真正让整个程序运转的是“sys.exit(app.exec_())”里面嵌套的这个“app.exec_()”,而正是因为这个嵌套,一直误以为这个app.exec_()是一个跟退出“直接相关”(当然它们确实也相关)的方法,以至于百思不得其解。
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
PyQt5是一个用于创建图形用户界面(GUI)的Python库。它是基于Qt框架的Python绑定,可以让开发者使用Python语言来开发跨平台的GUI应用程序PyQt5程序结构可以分为以下几个部分: 1. 导入模块:首先需要导入PyQt5模块,通常使用`import PyQt5`或者`from PyQt5 import *`来导入所有的PyQt5模块。 2. 创建应用程序对象:在PyQt5中,需要创建一个QApplication对象作为GUI应用程序的主要入口点。可以使用`app = QApplication(sys.argv)`来创建一个应用程序对象。 3. 创建主窗口:在PyQt5中,主窗口是GUI应用程序的主要界面窗口。可以使用`window = QMainWindow()`来创建一个主窗口对象。 4. 设置主窗口属性:可以使用主窗口对象的方法来设置主窗口的标题、大小、位置等属性。例如,可以使用`window.setWindowTitle("My Application")`来设置主窗口的标题。 5. 创建其他GUI组件:在主窗口中可以添加其他的GUI组件,例如按钮、标签、文本框等。可以使用相应的类来创建这些组件,并使用主窗口对象的方法将它们添加到主窗口中。 6. 设置布局管理器:在PyQt5中,可以使用布局管理器来自动调整GUI组件的位置和大小。常用的布局管理器有水平布局、垂直布局和网格布局等。可以使用主窗口对象的方法来设置布局管理器。 7. 显示主窗口:最后,需要调用`window.show()`方法来显示主窗口。然后,调用`app.exec_()`方法来启动应用程序的事件循环,使GUI应用程序进入运行状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值