菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python PyQt

PyQt 是一个强大的 Python 库,用于创建图形用户界面(GUI),可以用来代替 Python 内置的 Tkinter。

PyQt 是 Qt 框架的 Python 绑定,广泛应用于桌面应用程序开发。

Qt 是一个跨平台的 C++ 应用程序开发框架。

PyQt 允许 Python 开发者利用 Qt 库创建功能强大的 GUI 应用程序。

PyQt 有以下几个主要版本:

  • PyQt4:基于 Qt4 的绑定
  • PyQt5:基 于Qt5 的绑定
  • PyQt6:基于 Qt6 的绑定(最新版本)

安装 PyQt

使用 pip 安装 PyQt5:

# 安装PyQt5
pip install PyQt5
# 安装Qt设计师和其他工具(可选)
pip install PyQt5-tools

第一个 PyQt 程序

创建简单窗口

以下是一个最基本的 PyQt 程序,创建一个空白窗口:

实例

from PyQt5.QtWidgets import QApplication, QWidget

# 创建应用实例
app = QApplication([])

# 创建主窗口
window = QWidget()
window.setWindowTitle("我的第一个 PyQt 程序")
window.setGeometry(100, 100, 400, 300) # (x, y, width, height)

# 显示窗口
window.show()

# 运行应用
app.exec_()

代码解析

  1. QApplication:管理 GUI 应用程序的控制流和主设置。
  2. QWidget:最基本的窗口类,所有 UI 组件都继承自它。
  3. setWindowTitle():设置窗口标题。
  4. setGeometry():设置窗口位置和大小。
  5. show():显示窗口。
  6. app.exec_():启动事件循环,等待用户交互。

一个典型的PyQt应用程序包含以下部分:

  1. QApplication对象:每个PyQt应用程序都需要有一个QApplication实例
  2. 窗口和控件:用户界面组件
  3. 事件循环:处理用户输入和系统事件的循环
  4. 事件处理器:响应事件的函数或方法

实例

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

class MainWindow(QMainWindow):
def __init__(self):
super().__init__()

# 设置窗口标题和大小
self.setWindowTitle("我的第一个PyQt应用")
self.setGeometry(100, 100, 400, 300) # x, y, width, height

# 创建按钮
self.button = QPushButton("点击我", self)
self.button.setGeometry(150, 150, 100, 30)
self.button.clicked.connect(self.button_clicked)

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

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

常用 PyQt 组件

按钮(QPushButton)

实例

from PyQt5.QtWidgets import QPushButton

button = QPushButton("点击我", window)
button.move(150, 150) # 设置按钮位置

标签(QLabel)

实例

from PyQt5.QtWidgets import QLabel

label = QLabel("Hello PyQt!", window)
label.move(100, 100)

文本框(QLineEdit)

实例

from PyQt5.QtWidgets import QLineEdit

textbox = QLineEdit(window)
textbox.move(100, 50)

更多常用组件内容参考:https://www.runoob.com/python3/python-pyqt-widgets.html


布局管理(QVBoxLayout)

使用布局管理器可以自动调整组件位置:

实例

from PyQt5.QtWidgets import QVBoxLayout, QLabel, QPushButton

layout = QVBoxLayout()
layout.addWidget(QLabel("用户名"))
layout.addWidget(QLineEdit())
layout.addWidget(QPushButton("登录"))
window.setLayout(layout)

更多布局管理内容参考:https://www.runoob.com/python3/python-pyqt-layout.html


信号与槽机制

PyQt 使用信号(Signal)槽(Slot)机制处理事件。

PyQt 的信号和槽机制是用于对象之间通信的核心机制。

  • 信号(Signal): 当特定事件发生时发出的通知
  • 槽(Slot): 响应信号的函数或方法

实例

from PyQt5.QtWidgets import QPushButton

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

button = QPushButton("点击我", window)
button.clicked.connect(on_button_click) # 连接信号和槽

自定义信号

实例

from PyQt5.QtCore import pyqtSignal, QObject

class MyEmitter(QObject):
my_signal = pyqtSignal(str) # 定义一个信号

emitter = MyEmitter()
emitter.my_signal.connect(lambda x: print(f"收到信号: {x}"))
emitter.my_signal.emit("Hello") # 触发信号

更多布局管理内容参考:https://www.runoob.com/python3/python-pyqt-signals-and-slots.html


使用 Qt Designer

Qt Designer 是一个可视化设计工具,可以拖放组件来设计界面:

  • 启动 Designer (通常在 Python 安装目录的 Lib\site-packages\qt5_applications\Qt\bin 下)
  • 设计界面并保存为 .ui 文件
  • .ui 文件转换为 Python 代码:

    pyuic5 input.ui -o output.py

在代码中使用生成的界面:

实例

from PyQt5 import uic

# 加载UI文件
Form, Window = uic.loadUiType("output.ui")

# 使用UI
app = QApplication(sys.argv)
window = Window()
form = Form()
form.setupUi(window)
window.show()
sys.exit(app.exec_())

实战:简单的记事本应用

界面设计

实例

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit,
QAction, QFileDialog, QMessageBox)

class Notepad(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.text_edit = QTextEdit(self)
self.setCentralWidget(self.text_edit)

self.create_actions()
self.create_menus()

self.setWindowTitle('简易记事本')
self.setGeometry(100, 100, 800, 600)

def create_actions(self):
# 文件菜单动作
self.new_action = QAction('新建', self)
self.new_action.setShortcut('Ctrl+N')
self.new_action.triggered.connect(self.new_file)

self.open_action = QAction('打开', self)
self.open_action.setShortcut('Ctrl+O')
self.open_action.triggered.connect(self.open_file)

self.save_action = QAction('保存', self)
self.save_action.setShortcut('Ctrl+S')
self.save_action.triggered.connect(self.save_file)

self.exit_action = QAction('退出', self)
self.exit_action.setShortcut('Ctrl+Q')
self.exit_action.triggered.connect(self.close)

# 编辑菜单动作
self.copy_action = QAction('复制', self)
self.copy_action.setShortcut('Ctrl+C')
self.copy_action.triggered.connect(self.text_edit.copy)

self.paste_action = QAction('粘贴', self)
self.paste_action.setShortcut('Ctrl+V')
self.paste_action.triggered.connect(self.text_edit.paste)

self.cut_action = QAction('剪切', self)
self.cut_action.setShortcut('Ctrl+X')
self.cut_action.triggered.connect(self.text_edit.cut)

def create_menus(self):
menubar = self.menuBar()

# 文件菜单
file_menu = menubar.addMenu('文件')
file_menu.addAction(self.new_action)
file_menu.addAction(self.open_action)
file_menu.addAction(self.save_action)
file_menu.addSeparator()
file_menu.addAction(self.exit_action)

# 编辑菜单
edit_menu = menubar.addMenu('编辑')
edit_menu.addAction(self.copy_action)
edit_menu.addAction(self.paste_action)
edit_menu.addAction(self.cut_action)

def new_file(self):
self.text_edit.clear()

def open_file(self):
filename, _ = QFileDialog.getOpenFileName(self, '打开文件')
if filename:
try:
with open(filename, 'r') as f:
self.text_edit.setText(f.read())
except Exception as e:
QMessageBox.warning(self, '错误', f'无法打开文件: {e}')

def save_file(self):
filename, _ = QFileDialog.getSaveFileName(self, '保存文件')
if filename:
try:
with open(filename, 'w') as f:
f.write(self.text_edit.toPlainText())
except Exception as e:
QMessageBox.warning(self, '错误', f'无法保存文件: {e}')

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

PyQt5 核心组件

大多数组件位于 PyQt5.QtWidgets。

高级功能(如多媒体、网络)可能需要其他模块(如 QtCore, QtGui, QtNetwork 等)。

QListView/QTableView/QTreeView 需要搭配数据模型(如 QStandardItemModel)使用,灵活性更高。

其他安装扩展:

pip install PyQtWebEngine # 网页支持
pip install PyQtChart # 图表支持
组件类别组件名称所在模块说明
基础窗口组件QWidgetQtWidgets所有用户界面对象的基类,可作为空白窗口或容器
QMainWindowQtWidgets主窗口框架,包含菜单栏、工具栏、状态栏等
QDialogQtWidgets对话框基类,用于弹出窗口
布局管理QVBoxLayoutQtWidgets垂直布局管理器
QHBoxLayoutQtWidgets水平布局管理器
QGridLayoutQtWidgets网格布局管理器
QFormLayoutQtWidgets表单布局管理器(标签+输入框对)
按钮类QPushButtonQtWidgets普通按钮
QRadioButtonQtWidgets单选按钮
QCheckBoxQtWidgets复选框
QToolButtonQtWidgets工具栏按钮(可带图标)
输入控件QLineEditQtWidgets单行文本输入框
QTextEditQtWidgets多行富文本编辑器(支持HTML)
QPlainTextEditQtWidgets多行纯文本编辑器
QSpinBoxQtWidgets数字调节框(整数)
QDoubleSpinBoxQtWidgets数字调节框(浮点数)
QComboBoxQtWidgets下拉选择框
QDateEditQtWidgets日期选择框
QTimeEditQtWidgets时间选择框
QDateTimeEditQtWidgets日期时间选择框
QSliderQtWidgets滑动条(水平/垂直)
QDialQtWidgets圆形旋钮控件
显示控件QLabelQtWidgets文本/图片标签
QLCDNumberQtWidgetsLCD数字显示屏
QProgressBarQtWidgets进度条
QStatusBarQtWidgets状态栏(通常用于QMainWindow)
容器类QGroupBoxQtWidgets分组框(带标题的容器)
QTabWidgetQtWidgets标签页容器
QStackedWidgetQtWidgets堆叠容器(每次显示一个子控件)
QScrollAreaQtWidgets滚动区域容器
QMdiAreaQtWidgetsMDI(多文档界面)区域
列表/表格/树QListWidgetQtWidgets列表控件(含项管理)
QTreeWidgetQtWidgets树形控件
QTableWidgetQtWidgets表格控件
QListViewQtWidgets列表视图(需搭配数据模型)
QTableViewQtWidgets表格视图(需搭配数据模型)
QTreeViewQtWidgets树形视图(需搭配数据模型)
菜单/工具栏QMenuBarQtWidgets菜单栏
QMenuQtWidgets菜单(可包含子菜单和动作)
QToolBarQtWidgets工具栏
QActionQtWidgets动作(用于菜单项、工具栏按钮等)
对话框QFileDialogQtWidgets文件选择对话框
QColorDialogQtWidgets颜色选择对话框
QFontDialogQtWidgets字体选择对话框
QInputDialogQtWidgets输入对话框(文本、数字等)
QMessageBoxQtWidgets消息提示框(警告、错误、询问等)
图形视图QGraphicsViewQtWidgets图形视图框架(用于2D图形)
QGraphicsSceneQtWidgets图形场景(配合QGraphicsView使用)
其他功能组件QCalendarWidgetQtWidgets日历控件
QSplashScreenQtWidgets启动画面
QSystemTrayIconQtWidgets系统托盘图标
QWebEngineViewQtWebEngineWidgets网页浏览器组件(需单独安装PyQtWebEngine)

学习资源

AI 思考中...

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /