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

相关推荐
smj2302_7968265224 分钟前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀1 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
九转成圣1 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio1 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
2501_901200531 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
laowangpython1 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫1 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch2 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI2 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0012 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript