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_()