深度学习项目2---界面设计之pyqt5

发布于:2025-05-15 ⋅ 阅读:(8) ⋅ 点赞:(0)

学习目的

由于最近本科生毕设需要设计一个系统进行展示,于是写了个通用模板供大家使用。

pyqt5介绍

PyQt5 简介与使用教程

PyQt5 是一个用于创建图形用户界面 (GUI) 的 Python 库,它是 Qt 框架的 Python 绑定。Qt 是一个功能强大的跨平台应用程序开发框架,支持 Windows、macOS、Linux 等多种操作系统。PyQt5 结合了 Python 的简洁语法和 Qt 的丰富功能,使开发者能够快速创建美观、交互性强的桌面应用。

安装 PyQt5

使用 pip 安装 PyQt5:

pip install pyqt5

如果需要可视化设计界面的工具 Qt Designer,可以安装:

pip install pyqt5-tools

基本概念

PyQt5 的核心概念包括:

  1. 控件 (Widgets):构成 GUI 的基本元素,如按钮、标签、文本框等
  2. 布局 (Layouts):用于管理控件的排列方式
  3. 信号与槽 (Signals and Slots):用于对象间的事件通信
  4. 应用程序结构:QApplication、QMainWindow、QDialog 等类

第一个 PyQt5 应用

下面是一个简单的 PyQt5 应用示例,创建一个带有按钮的窗口:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout

def main():
    # 创建应用实例
    app = QApplication(sys.argv)
    
    # 创建主窗口
    window = QWidget()
    window.setWindowTitle('PyQt5 示例')
    window.setGeometry(100, 100, 300, 200)  # 设置窗口位置和大小
    
    # 创建按钮
    button = QPushButton('点击我!')
    button.clicked.connect(lambda: print('按钮被点击了!'))
    
    # 创建垂直布局
    layout = QVBoxLayout()
    layout.addWidget(button)
    
    # 设置布局到窗口
    window.setLayout(layout)
    
    # 显示窗口
    window.show()
    
    # 进入应用主循环
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

常用控件

PyQt5 提供了丰富的控件,以下是一些常用控件的示例:

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QPushButton, 
                             QLineEdit, QTextEdit, QComboBox, QCheckBox, 
                             QRadioButton, QSlider, QProgressBar, QMessageBox)
from PyQt5.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        # 设置窗口标题和大小
        self.setWindowTitle('PyQt5 控件示例')
        self.setGeometry(100, 100, 600, 400)
        
        # 创建标签
        label = QLabel('这是一个标签', self)
        label.move(20, 20)
        
        # 创建按钮
        button = QPushButton('点击我', self)
        button.move(20, 50)
        button.clicked.connect(self.on_button_click)
        
        # 创建单行文本框
        line_edit = QLineEdit(self)
        line_edit.setPlaceholderText('请输入文本')
        line_edit.move(20, 90)
        
        # 创建多行文本框
        text_edit = QTextEdit(self)
        text_edit.setPlaceholderText('请输入多行文本')
        text_edit.move(20, 120)
        text_edit.resize(200, 100)
        
        # 创建下拉列表
        combo_box = QComboBox(self)
        combo_box.addItems(['选项1', '选项2', '选项3'])
        combo_box.move(20, 240)
        
        # 创建复选框
        check_box = QCheckBox('这是一个复选框', self)
        check_box.move(20, 270)
        
        # 创建单选按钮
        radio_button1 = QRadioButton('单选按钮1', self)
        radio_button1.move(20, 300)
        radio_button1.setChecked(True)
        
        radio_button2 = QRadioButton('单选按钮2', self)
        radio_button2.move(120, 300)
        
        # 创建滑块
        slider = QSlider(Qt.Horizontal, self)
        slider.setRange(0, 100)
        slider.setValue(50)
        slider.move(20, 330)
        slider.valueChanged.connect(self.on_slider_change)
        
        # 创建进度条
        progress_bar = QProgressBar(self)
        progress_bar.setValue(50)
        progress_bar.move(250, 330)
        progress_bar.resize(200, 20)
        
    def on_button_click(self):
        QMessageBox.information(self, '消息', '按钮被点击了!')
        
    def on_slider_change(self, value):
        self.findChild(QProgressBar).setValue(value)

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

布局管理

布局管理是设计 GUI 的重要部分,PyQt5 提供了几种布局类:

  1. QVBoxLayout:垂直布局
  2. QHBoxLayout:水平布局
  3. QGridLayout:网格布局
  4. QFormLayout:表单布局

以下是使用布局管理器的示例:

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout, 
                             QPushButton, QLabel, QLineEdit, QTextEdit)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        # 创建垂直布局
        main_layout = QVBoxLayout()
        
        # 创建顶部水平布局
        top_layout = QHBoxLayout()
        
        # 添加控件到顶部布局
        label = QLabel('用户名:')
        line_edit = QLineEdit()
        button = QPushButton('登录')
        
        top_layout.addWidget(label)
        top_layout.addWidget(line_edit)
        top_layout.addWidget(button)
        
        # 创建底部文本编辑区
        text_edit = QTextEdit()
        
        # 将顶部布局和文本编辑区添加到主布局
        main_layout.addLayout(top_layout)
        main_layout.addWidget(text_edit)
        
        # 设置主布局到窗口
        self.setLayout(main_layout)
        
        # 设置窗口属性
        self.setWindowTitle('布局示例')
        self.setGeometry(300, 300, 400, 300)

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

信号与槽机制

信号与槽是 PyQt5 中对象间通信的机制:

  • 信号:当控件状态发生变化时发出的事件
  • :接收信号并执行相应操作的函数

以下是信号与槽的示例:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        # 创建标签和按钮
        self.label = QLabel('点击按钮', self)
        self.label.move(50, 50)
        
        button = QPushButton('按钮', self)
        button.move(50, 100)
        
        # 连接信号与槽
        button.clicked.connect(self.on_button_click)
        
        # 设置窗口属性
        self.setWindowTitle('信号与槽示例')
        self.setGeometry(300, 300, 300, 200)
        
    def on_button_click(self):
        self.label.setText('按钮被点击了!')

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

使用 Qt Designer 设计界面

Qt Designer 是一个可视化界面设计工具,可以通过拖拽方式创建界面,然后将设计转换为 Python 代码。

  1. 启动 Qt Designer(通常位于 Python 安装目录的 Scripts 文件夹中)
  2. 设计界面并保存为 .ui 文件
  3. 使用 pyuic5 工具将 .ui 文件转换为 Python 代码:
pyuic5 -o ui_mainwindow.py mainwindow.ui

使用生成的 UI 代码:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui_mainwindow import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        # 创建 UI 对象
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        # 连接信号与槽
        self.ui.pushButton.clicked.connect(self.on_button_click)
        
    def on_button_click(self):
        self.ui.label.setText('按钮被点击了!')

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

总结

PyQt5 是一个功能强大的 GUI 开发库,能够帮助开发者创建跨平台的桌面应用。通过学习控件、布局、信号与槽等核心概念,结合 Qt Designer 工具,可以高效地开发出美观、交互性强的应用程序。

以上是 PyQt5 的基础介绍和使用教程,希望对你有所帮助!

本地通用模板

通用模板
在这里插入图片描述