PyQt5

PyQt

一、介绍

1.QT 跨平台(C++语言 GUI)

2.PyQt=python+Qt技术

二、构建虚拟环境

三、pyqt基本UI

简单的程序

import sys  #
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':
    # 有且只有一个
    app = QApplication(sys.argv)    # 创建一个对象(程序),接受参数,当前运行的函数参数

    w = QWidget()  # 创建了一个界面的对象
    
    w.setWindowTitle("第一个pyqt")  # 设置窗口标题 
    
    w.show()    # 展示窗口
    
    # 程序进行循环等待状态
    app.exec_()  # 事件检测循环,开启一个程序

模块介绍

QtCore:包含了核心的非GUI的功能。主要是时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用

QtGui:包括了窗口系统、事件处理、2D图像、基本绘画、字体和文字类

QtWidgets:包含了一系列创建桌面应用的UI元素

Widget——控件,插件

1、按键——QPushButton

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADrxxINq-1678115702227)(C:\Users\Chris chen\AppData\Roaming\Typora\typora-user-images\1678102678679.png)]

2、纯文本——QLabel

    # 1.下面创建一个QLabel,然后调用方法指定父类
    # label = QLabel("账号:")
    # 设置父对象
    # label.setParent(w)

    # 2.下面创建一个QLabel(纯文本),在创建的时候指定了父对象
    label = QLabel("账号:", w)

3、输入框——QLineEdit

	# 文本框
    edit = QLineEdit(w)
    edit.setPlaceholderText("请输入账号")
    edit.setGeometry(55, 20, 200, 20)

注意:必须设置父对象,不然不显示

4、设置窗口的大小

# 窗口的大小
w.resize(600, 300)

5、窗口显示的位置

    # 调整窗口在屏幕中央显示   QDesktopWidget——桌面控件 当前屏幕主键  availableGeometry——可用的区域
    center_pointer = QDesktopWidget().availableGeometry().center()
    print(center_pointer)
    x = center_pointer.x()
    y = center_pointer.y()
    old_x, old_y, width, height = w.frameGeometry().getRect()  # 拆包
    w.move(x-width/2, y-height/2)

6、设置窗口图标

   # 设置图标
    w.setWindowIcon(QIcon('../images/dragon.png'))
QRect(int x, int y, int width, int height)

四、布局

1、QBoxLayout——盒子布局

垂直——vertical——QVBoxLayout(垂直布局)

水平——horizontal——QHBoxLayout(水平布局)

2、addStretch——弹簧

若无参数——自动分配,弹簧自身

有参数——比例关系

例子:QVBoxLayout

import sys

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton


class MyWindow(QWidget):
    def __init__(self):
        # 切记一定要调用父类的__init__方法,因为它里面有很多对UI空间的初始化操作
        super().__init__()
        # 设置窗口的大小
        self.resize(300, 200)
        # 设置窗口标题
        self.setWindowTitle("垂直布局")
        # 设置窗口图标
        self.setWindowIcon(QIcon("../images/dragon.png"))

        # 垂直布局 约束,看不见
        layout = QVBoxLayout()
        # 作用是在布局器中增加一个伸缩量,里面的参数表示QSpacerItem的个数,默认值为零
        # 会将你放在layout中的空间压缩成默认的大小
        # 下面的比例是1:1:1:2
        # 添加弹簧
        layout.addStretch(1)

        # 按钮1
        btn1 = QPushButton("按钮1")
        # 添加到布局器中
        layout.addWidget(btn1)
        # 添加弹簧
        layout.addStretch(1)

        # 按钮2
        btn2 = QPushButton("按钮2")
        # 添加到布局器
        layout.addWidget(btn2)
        # 添加弹簧
        layout.addStretch(1)

        # 按钮3
        btn3 = QPushButton("按钮3")
        # 添加到布局器
        layout.addWidget(btn3)
        # 添加一个伸缩器(理解为一个弹簧)
        layout.addStretch(2)

        # 让当前的窗口使用这个排列的规则(布局器)
        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 创建一个QWidget子类
    w = MyWindow()
    w.show()
    app.exec_()

例子:QVBoxLayout+QHBoxLayout

import sys

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton, QGroupBox, QHBoxLayout


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 最外层的垂直布局,包含两个部分:爱好和性别
        container = QVBoxLayout()

        # -----创建第一个组,添加多个组件------
        # hobby 主要是保证他们是一个组
        hobby_box = QGroupBox("爱好")
        # v_layout 是保证3个爱好是垂直摆放的
        v_layout = QVBoxLayout()
        # 按钮
        btn1 = QPushButton("舞蹈")
        btn2 = QPushButton("音乐")
        btn3 = QPushButton("学习")
        # 添加到v_layout中
        v_layout.addWidget(btn1)
        v_layout.addWidget(btn2)
        v_layout.addWidget(btn3)
        # 将v_layout添加到hobby_box中
        hobby_box.setLayout(v_layout)

        # -----创建第2组,添加多个组件
        # 性别组
        gender_box = QGroupBox("性别")
        # 性别容器
        h_layout = QHBoxLayout()
        # 性别选项
        btn4 = QPushButton("男")
        btn5 = QPushButton("女")
        # 添加到性别容器中
        h_layout.addWidget(btn4)
        h_layout.addWidget(btn5)
        # 将h_layout添加到gender_box中
        gender_box.setLayout(h_layout)

        # 把爱好的内容添加到容器中
        container.addWidget(hobby_box)
        # 把性别的内容添加到容器中
        container.addWidget(gender_box)
        # 设置窗口显示的内容是最外层容器
        self.setLayout(container)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 创建一个QWidget子类
    w = MyWindow()
    w.show()
    app.exec_()