Python图形化界面——pyqt5教程

PyQt5 从入门到实战:构建你的第一个桌面应用

1. 环境搭建与安装

使用pip包管理器可以轻松完成PyQt5的安装。

基本安装

在命令行中执行以下命令安装核心库:

bash 复制代码
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装开发者工具

为了使用可视化界面设计工具,建议安装pyqt5-tools包:

bash 复制代码
pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

配置Qt Designer

在pycharm中找到外部工具

程序为python安装路径下site-packages的中qt5_applications\Qt\bin\designer.exe文件

配置PyUIC

程序为python的位置

bash 复制代码
实参为-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py

配置Pyrcc

程序为python的位置

bash 复制代码
实参为$FileName$ -o $FileNameWithoutExtension$_rc.py

验证安装

运行以下代码验证PyQt5是否安装成功:

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

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('我的第一个PyQt5应用')
window.resize(400, 300)
window.show()
sys.exit(app.exec_())

如果出现空白窗口,则表示环境配置成功。

2. PyQt5 核心概念

2.1 应用程序架构

PyQt5应用的基本结构包含三个主要部分:

  1. QApplication:管理应用程序的控制流和主要设置(每个应用只需一个实例)
  2. 窗口部件:所有用户界面元素的基类,如按钮、标签等
  3. 事件循环 :通过app.exec_()启动,用于处理用户交互

2.2 信号与槽机制

这是PyQt5处理事件的核心机制:

  • 信号:由事件触发(如按钮点击)
  • :响应信号的函数

示例代码:

python 复制代码
from PyQt5.QtWidgets import QApplication, QPushButton

def button_clicked():
    print("按钮被点击了!")

app = QApplication([])
button = QPushButton('点击我')
button.clicked.connect(button_clicked)  # 连接信号与槽
button.show()
app.exec_()

3. 使用Qt Designer进行可视化设计

3.1 启动Qt Designer

安装PyQt5-tools后,可通过命令行启动:

bash 复制代码
designer

或者通过使用外部工具的方法中的QtDesinger打开

点击创建就建立一个窗口

通过拖动左侧的widhet box下的控件为窗口添加内容,点击保存可以将内容保存为.ui的文件

3.2转换UI文件为Python代码

将设计好的.ui文件转换为Python代码:

bash 复制代码
pyuic5 input.ui -o output.py

或者右击ui文件使用外部工具PyUIC转化

4. 常用控件详解

控件名称 类名 功能描述 常用方法/信号
标签 QLabel 显示文本或图像 setText(), setPixmap()
按钮 QPushButton 触发操作 clicked信号
单行文本框 QLineEdit 输入单行文本 text(), textChanged信号
多行文本框 QTextEdit 输入和显示多行文本 toPlainText(), setText()
复选框 QCheckBox 多选选项 isChecked(), stateChanged信号
单选按钮 QRadioButton 单选选项(需分组) 使用QButtonGroup管理
下拉框 QComboBox 下拉选择 addItem(), currentTextChanged信号
滑块 QSlider 通过滑动选择数值 setRange(), valueChanged信号

控件使用示例

python 复制代码
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, 
                            QHBoxLayout, QLabel, QPushButton, 
                            QLineEdit, QCheckBox)

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        vbox = QVBoxLayout()
        
        # 用户名输入区域
        label = QLabel('用户名:')
        self.input = QLineEdit()
        hbox1 = QHBoxLayout()
        hbox1.addWidget(label)
        hbox1.addWidget(self.input)
        
        # 复选框
        self.checkbox = QCheckBox('记住我')
        
        # 按钮
        btn = QPushButton('确定')
        btn.clicked.connect(self.onButtonClick)
        
        # 添加所有控件
        vbox.addLayout(hbox1)
        vbox.addWidget(self.checkbox)
        vbox.addWidget(btn)
        
        self.setLayout(vbox)
        self.setWindowTitle('控件示例')
        self.resize(300, 150)
    
    def onButtonClick(self):
        username = self.input.text()
        remember = self.checkbox.isChecked()
        print(f'用户名: {username}, 记住我: {remember}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

相关推荐
陈小桔2 分钟前
logging模块-python
开发语言·python
消失的旧时光-19433 分钟前
函数指针 + 结构体 = C 语言的“对象模型”?——从 C 到 C++ / Java 的本质统一
linux·c语言·开发语言·c++·c
!停4 分钟前
C语言栈和队列的实现
开发语言·数据结构
源代码•宸4 分钟前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
水中加点糖5 分钟前
RagFlow实现多模态搜索(文、图、视频)与(关键字/相似度)搜索原理(二)
python·ai·音视频·knn·ragflow·多模态搜索·相似度搜索
期待のcode6 分钟前
TransactionManager
java·开发语言·spring boot
郝学胜-神的一滴7 分钟前
Linux系统编程:深入理解读写锁的原理与应用
linux·服务器·开发语言·c++·程序人生
贾宝玉的玉宝贾7 分钟前
FreeSWITCH 简单图形化界面52 - 拨号应用 Answer 介绍
python·django·voip·freeswitch·sip·ippbx·jssip
Larry_Yanan7 分钟前
Qt多进程(十一)Linux下socket通信
linux·开发语言·c++·qt
Hello.Reader7 分钟前
PyFlink JAR、Python 包、requirements、虚拟环境、模型文件,远程集群怎么一次搞定?
java·python·jar