Python进阶教程:35_PyQt (保姆级零基础教程)

一、PyQt 是什么

PyQt 是一套Python 图形界面 GUI 库,用来做桌面软件窗口:按钮、输入框、表格、弹窗、菜单这些桌面程序界面。

  • PyQt5:目前学习最主流版本
  • PyQt6:新版,语法略有区别,新手优先学 PyQt5

简单理解:不用网页,直接做 Windows / Mac 本地桌面小程序,比如计算器、工具软件、上位机界面。

二、安装 PyQt5

打开 cmd 命令行执行安装

复制代码
pip install pyqt5

安装完成之后就可以导入模块使用

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget

两个必备导入:

  1. sys:用来管理程序退出
  2. PyQt5.QtWidgets:存放所有窗口控件(按钮、标签、输入框)

三、第一个最简单窗口程序(案例 1)

复制代码
import sys
# 导入需要的控件
from PyQt5.QtWidgets import QApplication, QWidget

# 1.创建应用程序对象,GUI程序必须要有
app = QApplication(sys.argv)

# 2.创建一个空白窗口
window = QWidget()
# 设置窗口标题
window.setWindowTitle("我的第一个PyQt窗口")
# 设置窗口大小 宽度400,高度300
window.resize(400, 300)

# 3.显示窗口
window.show()

# 4.启动程序消息循环,等待点击关闭按钮退出
sys.exit(app.exec_())

逐行详细解释

  1. QApplication(sys.argv):整个 GUI 程序的核心实例 ,一个桌面程序只能创建 1 次;sys.argv接收命令行参数
  2. QWidget():最基础空白窗体,所有界面都继承它
  3. setWindowTitle():修改左上角窗口名字
  4. resize(宽,高):定义窗口尺寸
  5. window.show():默认窗口隐藏,调用 show 才看得见
  6. app.exec_():开启事件循环(监听鼠标点击、关闭窗口等操作)
  7. sys.exit():关闭窗口后正常退出进程

运行代码,直接弹出一个空白桌面窗口!

四、常用基础控件讲解 + 完整示例

案例 2:QLabel 文字标签(显示文本)

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel

app = QApplication(sys.argv)
win = QWidget()
win.setWindowTitle("标签控件演示")
win.resize(400,200)

# 创建文字标签
label = QLabel("Hello PyQt!", win)
# 设置标签位置和大小 x,y,宽,高
label.setGeometry(50,50,200,40)

win.show()
sys.exit(app.exec_())
  • QLabel:展示文字、图片
  • setGeometry(x坐标, y坐标, width, height):绝对定位控件在窗口中的位置 窗口左上角坐标为 (0,0),向右 X 变大,向下 Y 变大

案例 3:QPushButton 按钮,点击触发事件(信号与槽!PyQt 最重要知识点)

信号与槽(Signal & Slot) 按钮被点击 = 信号 signal 执行一段函数代码 = 槽 slot 使用 按钮.clicked.connect(函数名) 绑定点击动作

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel

app = QApplication(sys.argv)
win = QWidget()
win.resize(400,250)
win.setWindowTitle("点击按钮测试")

# 创建标签
label = QLabel("还没有点击按钮", win)
label.setGeometry(50,30,250,30)

# 创建按钮
btn = QPushButton("点我!", win)
btn.setGeometry(50,80,120,40)

# 定义点击后执行的函数
def click_func():
    label.setText("✅ 按钮已经被点击啦!")

# 绑定按钮点击信号和函数
btn.clicked.connect(click_func)

win.show()
sys.exit(app.exec_())

核心解释

  1. QPushButton("文字",父窗口):创建按钮,第二个参数代表放在哪个窗口上
  2. btn.clicked:按钮自带的点击信号
  3. .connect(函数名):信号触发时,自动运行这个函数(函数不要写括号!)
  4. label.setText() 修改标签文字

案例 4:QLineEdit 单行输入框(接收用户输入文字)

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit

app = QApplication(sys.argv)
win = QWidget()
win.resize(450,300)
win.setWindowTitle("输入框演示")

# 输入框控件
input_box = QLineEdit("", win)
input_box.setGeometry(50,40,250,35)

# 显示结果的标签
result_label = QLabel("您输入的内容:", win)
result_label.setGeometry(50,120,350,35)

# 获取按钮
def get_text():
    # .text() 获取输入框里面的字符串
    content = input_box.text()
    result_label.setText(f"您输入的内容:{content}")

btn = QPushButton("获取输入", win)
btn.setGeometry(50,180,120,40)
btn.clicked.connect(get_text)

win.show()
sys.exit(app.exec_())

关键方法:

  • input_box.text() 获取输入框文字
  • input_box.clear() 清空输入框

案例 5:QMessageBox 弹出提示弹窗

点击按钮弹出消息提示框

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox

app = QApplication(sys.argv)
win = QWidget()
win.resize(300,200)

def show_msg():
    # 弹出提示框
    QMessageBox.information(win, "提示窗口", "操作成功!")

btn = QPushButton("弹出提示", win)
btn.setGeometry(60,60,150,40)
btn.clicked.connect(show_msg)

win.show()
sys.exit(app.exec_())

弹窗种类:

  1. QMessageBox.information() 普通提示
  2. QMessageBox.warning() 警告弹窗
  3. QMessageBox.critical() 错误弹窗
  4. QMessageBox.question() 确认选择框(是 / 否)

五、布局管理(不用手动写坐标!自动排版控件)

前面案例用 setGeometry() 绝对定位,窗口放大缩小控件不会跟着动。 布局 Layout:自动排列控件,窗口拉伸时控件自适应大小 三种最常用布局:

  1. QVBoxLayout:垂直布局(控件从上往下排)
  2. QHBoxLayout:水平布局(控件从左往右排)
  3. QGridLayout:网格布局(表格形式多行多列)

案例 6:QVBoxLayout 垂直布局示例

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout

app = QApplication(sys.argv)
win = QWidget()
win.resize(300,300)
win.setWindowTitle("垂直布局")

# 创建3个按钮
b1 = QPushButton("按钮1")
b2 = QPushButton("按钮2")
b3 = QPushButton("按钮3")

# 创建垂直布局对象
layout = QVBoxLayout()
# 把控件依次加入布局
layout.addWidget(b1)
layout.addWidget(b2)
layout.addWidget(b3)

# 将布局设置给窗口
win.setLayout(layout)

win.show()
sys.exit(app.exec_())

运行效果:按钮垂直均匀排列,拉大窗口按钮自动拉伸!

案例 7:QHBoxLayout 水平布局

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout

app = QApplication(sys.argv)
win = QWidget()
win.resize(400,150)

b1 = QPushButton("A")
b2 = QPushButton("B")
b3 = QPushButton("C")

layout = QHBoxLayout()
layout.addWidget(b1)
layout.addWidget(b2)
layout.addWidget(b3)

win.setLayout(layout)
win.show()
sys.exit(app.exec_())

案例 8:嵌套布局(水平 + 垂直组合,复杂界面)

真实软件界面一般都是布局嵌套!

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout

app = QApplication(sys.argv)
win = QWidget()
win.resize(400,250)

# 三个按钮横向排列
h_layout = QHBoxLayout()
h_layout.addWidget(QPushButton("左"))
h_layout.addWidget(QPushButton("中"))
h_layout.addWidget(QPushButton("右"))

# 主布局垂直放一个按钮 + 上面的水平布局
main_layout = QVBoxLayout()
main_layout.addWidget(QPushButton("顶部大按钮"))
main_layout.addLayout(h_layout)

win.setLayout(main_layout)
win.show()
sys.exit(app.exec_())

addLayout():把子布局放进父布局,实现复杂界面排版

六、面向对象写法(正式项目标准写法!)

前面我们直接写全局代码,复杂程序推荐类继承 QWidget管理界面

案例 9:完整类封装模板(以后写软件都用这个格式)

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel

# 自定义窗口类,继承QWidget
class MyWindow(QWidget):
    def __init__(self):
        super().__init__() # 调用父类构造函数,固定写法
        self.init_ui()     # 调用自己写的界面初始化函数

    def init_ui(self):
        # 在这个函数里面创建所有控件
        self.setWindowTitle("面向对象版本")
        self.resize(400,220)

        self.label = QLabel("等待点击",self)
        self.label.move(50,30)

        self.btn = QPushButton("点击修改文字",self)
        self.btn.move(50,80)
        self.btn.clicked.connect(self.on_click)

    # 按钮触发的方法,必须加self
    def on_click(self):
        self.label.setText("🎉成功触发类内部函数!")

# 程序入口
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

解释关键点

  1. class MyWindow(QWidget):自定义窗口
  2. super().__init__() 必须保留
  3. 控件加上self.变成实例属性,函数之间可以共用控件
  4. if __name__ == "__main__": Python 程序入口规范,方便打包 exe

七、Qt Designer 可视化拖拽设计界面(不用手写全部控件!)

1. 打开设计工具

安装完成后命令行输入:

复制代码
pyqt5-tools designer

打开可视化画布,鼠标拖拽按钮、输入框,画好界面保存为 .ui 文件。 然后用代码加载 ui 文件,不用一个个手写控件!

适合做大界面项目,工业上位机常用这个方式开发

八、实战小项目:简易加法计算器

复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QVBoxLayout

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

    def init_ui(self):
        self.setWindowTitle("简易加法计算器")
        self.resize(350,250)

        # 两个输入框
        self.num1 = QLineEdit()
        self.num2 = QLineEdit()
        self.result_label = QLabel("结果:")
        self.calc_btn = QPushButton("计算相加")
        self.calc_btn.clicked.connect(self.calculate)

        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.num1)
        layout.addWidget(self.num2)
        layout.addWidget(self.calc_btn)
        layout.addWidget(self.result_label)
        self.setLayout(layout)

    def calculate(self):
        try:
            a = float(self.num1.text())
            b = float(self.num2.text())
            res = a + b
            self.result_label.setText(f"结果:{a} + {b} = {res}")
        except ValueError:
            self.result_label.setText("❌请输入合法数字!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = CalcWindow()
    win.show()
    sys.exit(app.exec_())

功能:输入两个数字,点击按钮求和,捕获输入错误!

相关推荐
释厄6232 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
信誓旦旦的程序猿2 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
FYKJ_20102 小时前
springboot羽毛球场地管理系统00626-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
Wx-bishekaifayuan3 小时前
django医院营收信息预测系统49414-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
Wx-bishekaifayuan3 小时前
springboot会议室预约管理系统42030-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
IT毕设梦工厂3 小时前
计算机毕业设计选题推荐:基于大数据的房地产交易数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hive·hadoop·python·数据分析·spark·课程设计
Wx-bishekaifayuan3 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
FYKJ_20103 小时前
django药饮个性化推荐系统54839-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
天赐范式3 小时前
天赐范式第175天:让活着的成员互相验证——异质互验与重放反伪造
python·数字生命·天赐范式·动态运行时·互验·重放反伪造