PYQT5学习笔记01——PYQT5初体验以及PYQT5程序基本结构分析

一、PYQT5初体验

  我们首先用代码编写一个窗口,窗口里面有一个标签控件,标签内的文本是 Hello World,代码如下:

# -*- coding: UTF-8 -*-
# 导入需要的包
from PyQt5.Qt import *
import sys

# 创建应用程序对象
app = QApplication(sys.argv)

# 控件操作
window = QWidget()
window.setWindowTitle("社会我唐哥,人狠话不多")
window.resize(500, 500)
window.move(400, 200)

label = QLabel(window)
label.setText("Hello World")
label.move(200, 200)

window.show()

# 开始执行应用程序,并进入消息循环
sys.exit(app.exec_())

  运行效果图如下:
在这里插入图片描述

二、PYQT5程序基本结构分析

  程序分为三部分组成,分别是:创建一个应用程序对象、控件的操作、开始执行应用程序,并进入消息循环。

0、导入需要的包

  虽然所有子模块都在PyQt5中,但是想要找到具体的函数在哪个子模块还是十分困难的我们可以直接使用如下语句引入所有的子模块使用:

from PyQt5.Qt import *  # 主要包括了我们常用的一些类,汇总到一块

  其实Qt这个子模块本质上也是引入了所有子模块,Qt源码如下图:
在这里插入图片描述

1、创建一个应用程序

  创建一个应用程序的语句如下:

app = QApplication(sys.argv)

  创建的这个应用程序就相当于我们写的这个GUI。

(1)sys.argv的作用

  其中sys.argv的作用是用来接收参数的,因为执行程序有两种方式,一种是pycharm右击直接运行,另一种是通过命令行来运行。第一种方式如下:
在这里插入图片描述
  命令行执行如下:
在这里插入图片描述
  我们以命令行的方式启动程序的话,是可以传递参数的,如下:
在这里插入图片描述

  代码如下:

app = QApplication(sys.argv)  # app自己创建的当前文件的局部变量
print(app.arguments())  # 打印传递的参数

  我们可以发现,sys.argv 用列表来接收参数,第一个位置是文件名字,第二个位置是参数1 …依次类推。

  那传递的参数有身边吗用呢?我们可以通过传递不同的参数来执行不同的逻辑,比如下面的代码:

args = sys.argv
print(args)
if args[1] == '1':
    print('xxxx')
else:
    print('oooo')
(2)全局的app对象

  我们如果在一个文件中创建的app对象,这个对象是局部变量,如果其他文件想使用这个对象获取参数的话,就是用不了。

  PyQt5给我们定义了一个全局变量为 qApp,源码如下:

qApp = QApplication()

  我们可以发现,qApp是Pyqt5帮我们创建的全局变量,每个文件都能用,但是里面没有传递参数,需要我们自己重新创建传递参数。

  如果我们需要使用局部变量的话,就自己创建应用程序对象;如果我们想使用不带参数的全部变量的话,就直接调用qApp即可;如果我们想使用带参数的全局变量的话,自己重新创建qApp即可。

2、控件的操作

(1)创建控件

  当我们创建一个控件之后,如果说,这个控件没有父控件,则把它当成顶层控件(窗口),系统会自动的给窗口添加一些装饰(标题栏),窗口控件具备一些特性(设置标题,图标),代码如下:

window = QWidget()  # 创建一个空白窗口
# window = QPushButton()  # 创建一个按钮
# window = QLabel()  # 展示一个标签

效果如下,框出来的就是标题栏:
在这里插入图片描述

(2)设置控件

  控件也可以作为一个容器(承载其他的控件),我们将一个标签控件label丢进空白控件QWidget中,代码如下:

window.setWindowTitle("社会我唐哥")  # 设置窗口标题
window.resize(500, 500)  # 设置窗口大小
window.move(400, 300)  # 设置窗口在屏幕的位置

# 控件也可以作为一个容器(承载其他的控件)
label = QLabel(window)  # 将标签子控件加入到父控件中
label.setText("hello world")
label.move(200, 200)  # 设置标签在窗口的位置

  效果图如下:
在这里插入图片描述

(3)展示控件

  刚创建好一个控件之后(该控件没有父控件),默认情况下不会被展示,只有手动的调用show才会被展示。

  子控件不用show。

  代码如下:

window.show()  # 将窗口展示出来

3、开始执行应用程序,并进入消息循环

  sys.exit(app.exec_()) :保证整个GUI程序不会退出,窗口会一直显示,不会自动关闭,并且会不断地去监听用户的交互操作信息。

  app.exec_() :如果程序内部发生错误的话,返回的退出码。将退出码传递给sys.exit(),就可以将退出码显示在控制台。

  代码如下:

sys.exit(app.exec_())

4、总体注释代码

# -*- coding: UTF-8 -*-
# 0.导入需要的包
from PyQt5.Qt import *  # 主要包括了我们常用的一些类,汇总到一块
import sys


# 1、创建一个应用程序对象
# 执行程序的两种方式:1、pycharm右击   2、命令行python 文件名字
# sys.argv:如果用命令行执行该程序的话,可以通过sys.argv来接收参数,命令为:python 文件名字 参数1 参数2  .....
# sys.argv用列表来接收参数,第一个位置是文件名字,第二个位置是参数1 .....依次类推
# 通过接收的参数,来判断应该执行什么什么逻辑的代码
# args = sys.argv
# print(args)
# if args[1] == '1':
#     print('xxxx')
# else:
#     print('oooo')

# 另一种方式是将这些参数传递给app对象,通过app对象也可以获取这些参数
app = QApplication(sys.argv)  # app自己创建的当前文件的局部变量
print(app.arguments())  # 打印传递的参数
# qApp = QApplication(sys.argv)
# print(qApp.arguments()) # qApp是Pyqt5帮我们创建的全局变量,每个文件都能用,但是里面没有传递参数,需要我们自己重新创建传递参数
# 2、控件的操作
# 创建控件,设置控件(大小、位置、样式)
# 1、创建控件
'''
当我们创建一个控件之后,如果说,这个控件没有父控件,则把它当成顶层控件(窗口),系统会自动的给窗口添加一些装饰(标题栏),
窗口控件具备一些特性(设置标题,图标)
'''

window = QWidget()  # 创建一个空白窗口
# window = QPushButton()  # 创建一个按钮
# window = QLabel()  # 展示一个标签
# 2、设置控件
window.setWindowTitle("社会我唐哥")  # 设置窗口标题
window.resize(500, 500)  # 设置窗口大小
window.move(400, 300)  # 设置窗口在屏幕的位置

# 控件也可以作为一个容器(承载其他的控件)
label = QLabel(window)  # 将标签子控件加入到父控件中
label.setText("hello world")
label.move(200, 200)  # 设置标签在窗口的位置

# 3、展示控件
# 刚创建好一个控件之后(该控件没有父控件),默认情况下不会被展示,只有手动的调用show才会被展示
# 子控件不用show
window.show()  # 将窗口展示出来

# 3、开始执行应用程序,并进入消息循环
# sys.exit(app.exec_())  # 保证整个GUI程序不会退出,窗口会一直显示,不会自动关闭,并且会不断地去监听用户的交互操作信息
# app.exec_():如果程序内部发生错误的话,返回的退出码
# 将退出码传递给sys.exit,就可以将退出码显示在控制台
sys.exit(app.exec_())

猜你喜欢

转载自blog.csdn.net/qq_47188967/article/details/130249895
今日推荐