文章目录
学习目的
由于最近本科生毕设需要设计一个系统进行展示,于是写了个通用模板供大家使用。
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 的核心概念包括:
- 控件 (Widgets):构成 GUI 的基本元素,如按钮、标签、文本框等
- 布局 (Layouts):用于管理控件的排列方式
- 信号与槽 (Signals and Slots):用于对象间的事件通信
- 应用程序结构: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 提供了几种布局类:
- QVBoxLayout:垂直布局
- QHBoxLayout:水平布局
- QGridLayout:网格布局
- 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 代码。
- 启动 Qt Designer(通常位于 Python 安装目录的 Scripts 文件夹中)
- 设计界面并保存为 .ui 文件
- 使用 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 的基础介绍和使用教程,希望对你有所帮助!