文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载导读本篇技术指南以 learnxinyminutes-docs 仓库中的 es/pyqt.mdPyQt 西班牙语教程为核心蓝本讲解如何用 Python 的 PyQt 绑定在几分钟内写出可运行的桌面 GUI 程序。读完本文你将掌握 PyQt 应用的基本骨架QApplication 事件循环、控件层级QWidget/QLabel/QPushButton以及信号与槽signal/slot机制并亲手实现一个带模态对话框的完整示例所有代码均可直接复制运行。一、PyQt 是什么Qt 框架的 Python 绑定Qt是一套广为人知的跨平台软件开发框架用C编写其核心价值在于同一份代码可以在多种软件与硬件平台上运行几乎无需或仅需少量修改同时保持原生应用的速度与能力。PyQt 则是 Qt 的 Python 语言绑定让开发者可以用 Python 的语法调用 Qt 的全部控件与事件体系。本仓库的 pyqt.md 是英文原版教程es/pyqt.md 即其西班牙语翻译版本。文中明确指出本篇内容改编自 Aleksey Kholovchuk 编写的 C 版 Qt 入门教程代码示例在功能上与 C 版本保持一致只是改用 PyQt 实现——这体现了同样的 Qt 概念用 Python 表达的迁移思路。除西班牙语外仓库还提供了 zh-cn/pyqt.md、de/pyqt.md、fr/pyqt.md、it/pyqt.md、id/pyqt.md、pt-br/pyqt.md、ru/pyqt.md 等多语言版本各版本代码主体一致可用于对照学习。运行前提本文所有代码均基于 PyQt4 的模块划分PyQt4.QtGui、PyQt4.QtCore运行前需要确认环境中已安装 PyQt4 绑定并以python直接执行脚本不是交互式 REPL因为脚本依赖if __name__ __main__入口与事件循环阻塞。二、第一个窗口Hello World 完整示例原文档的第一个示例构建了一个包含文字标签的最小窗口是理解 PyQt 程序骨架的最佳起点。以下代码完整继承自 es/pyqt.md注释为逐步讲解import sys from PyQt4 import QtGui def window(): # 创建应用对象 app QtGui.QApplication(sys.argv) # 创建一个 widget作为 label 的父控件 w QtGui.QWidget() # 在 widget 中添加一个 label 子控件 b QtGui.QLabel(w) # 设置 label 的文字 b.setText(Hello World!) # 设置 widget 的尺寸和位置 w.setGeometry(100, 100, 200, 50) b.move(50, 20) # 设置窗口的标题 w.setWindowTitle(PyQt) # 显示 widget 及其所有子控件 w.show() # 启动事件循环并阻塞直到应用程序退出 sys.exit(app.exec_()) if __name__ __main__: window()2.1 逐行拆解PyQt 应用的五个固定环节把上面的代码拆开可以提炼出所有 PyQt 程序共有的骨架环节代码作用创建应用对象app QtGui.QApplication(sys.argv)每个 PyQt 程序必须且只能有一个QApplication实例它管理 GUI 应用的初始化、资源与全局事件分发sys.argv把命令行参数传给 Qt 以便其解析创建顶层控件w QtGui.QWidget()一个没有父控件的QWidget即顶层窗口是所有子控件的容器创建子控件b QtGui.QLabel(w)标签是w的子控件子控件会随父控件一起显示、移动与销毁布局与显示setGeometry/move/show设定窗口在屏幕上的几何信息并显示整个控件树进入事件循环sys.exit(app.exec_())exec_()启动事件循环并阻塞当前线程直到quit()被调用或窗口被关闭返回值作为进程退出码传给sys.exit2.2 关键 API 与坐标体系setGeometry(x, y, width, height)四个参数依次为窗口左上角在屏幕上的横坐标、纵坐标、窗口宽度、窗口高度。示例中w.setGeometry(100, 100, 200, 50)表示窗口出现在屏幕坐标(100, 100)处尺寸为200 × 50像素。move(x, y)移动控件。注意b.move(50, 20)是相对父控件w的坐标即标签位于窗口客户区左上角向右 50、向下 20 的位置。父子控件坐标系的相对性正是 Qt 控件树设计的核心。setWindowTitle(PyQt)设置窗口标题栏文字。show()显示控件及其全部子控件等价于setVisible(True)。2.3 为什么是exec_()而不是exec()exec_()末尾的下划线是 Python 绑定层为避免与 Python 内置exec关键字冲突而添加的命名约定。这个细节在 PyQt 的历史版本中非常典型Qt 的 C 方法exec()在 Python 中被映射为exec_()。事件循环启动后所有用户交互点击、按键、重绘都由 Qt 在循环内分发给对应控件。三、进阶按钮与模态对话框原文档的第二个示例展示了 PyQt 的信号与槽signal/slot机制点击按钮弹出模态对话框再点击对话框按钮退出整个程序。这是向用户确认决定或提供信息的标准交互模式。import sys from PyQt4.QtGui import * from PyQt4.QtCore import * def window(): app QApplication(sys.argv) w QWidget() # 创建一个按钮并添加到 widget 控件 w b QPushButton(w) b.setText(Press me) b.move(50, 50) # 当按钮 b 被点击时调用 showdialog 函数 # 注意函数调用时没有 ()这样传入的是函数对象本身而非调用结果 b.clicked.connect(showdialog) w.setWindowTitle(PyQt Dialog) w.show() sys.exit(app.exec_()) # 对话框窗口创建函数当窗口中的按钮被点击时退出本程序 def showdialog(): d QDialog() b1 QPushButton(ok, d) b1.move(50, 50) d.setWindowTitle(Dialog) # 模态设置为 ApplicationModal对话框激活时阻塞程序并屏蔽父窗口 d.setWindowModality(Qt.ApplicationModal) # 当按钮被点击时整个进程将会结束 b1.clicked.connect(sys.exit) d.exec_() if __name__ __main__: window()3.1 通配符导入与模块划分第二个示例改用from PyQt4.QtGui import *与from PyQt4.QtCore import *通配符导入因此代码中可以直接写QApplication、QWidget、QPushButton、QDialog而不必再带QtGui.前缀。在 PyQt4 中QtGui模块承载控件类QtCore模块承载核心抽象本例中的Qt.ApplicationModal枚举即来自QtCore。3.2 信号与槽clicked.connect 的本质b.clicked.connect(showdialog)按钮被点击时会发射clicked信号connect把这个信号与showdialog函数槽绑定点击后 Qt 自动调用该函数。注意函数名后面没有()原文档特意强调这一点。传入的是函数对象本身而不是函数调用的返回值。若写成connect(showdialog())showdialog会在连接阶段就被立即执行一次返回值None被当作槽点击按钮时将无事发生。这正是信号与槽机制与普通函数调用的关键区别。b1.clicked.connect(sys.exit)把clicked信号直接连接到 Python 内置的sys.exit点击对话框中的 ok 按钮即终止整个进程。3.3 模态对话框与窗口模态d QDialog() b1 QPushButton(ok, d) b1.move(50, 50) d.setWindowTitle(Dialog) d.setWindowModality(Qt.ApplicationModal) d.exec_()QDialog是专门用于模态交互的窗口类型。setWindowModality控制对话框的阻塞范围模态值行为Qt.NonModal不阻塞对话框与父窗口可同时交互Qt.WindowModal阻塞父窗口及其所有祖先窗口Qt.ApplicationModal阻塞整个应用程序的所有窗口用户必须处理完对话框才能继续本示例采用此值d.exec_()为对话框启动自己的事件循环直到对话框被关闭才返回。配合Qt.ApplicationModal效果是弹出对话框期间主窗口w被完全屏蔽程序流程暂停在d.exec_()处——这正是原文档所说模态告诉弹出框在激活期间阻塞父窗口。3.4 调用链梳理整个程序的事件流可以概括为一条清晰的调用链window()创建QApplication→ 创建主窗口w与按钮b→connect注册信号槽 →app.exec_()启动主事件循环用户点击 Press me →clicked信号触发showdialog()showdialog()创建模态QDialog并exec_()进入对话框事件循环主窗口被屏蔽用户点击 ok →clicked信号触发sys.exit→ 整个进程结束。四、仓库视角这份教程在 learnxinyminutes-docs 中的组织方式4.1 文档即代码Documentation as Code本仓库 READMEREADME.md开宗明义Whirlwind tours of popular languages, presented as valid, commented code and explained as they go——即所有教程都以可直接运行的注释代码形式呈现。PyQt 教程正是这一模式的典型两个示例都是完整可执行的 Python 脚本注释即讲解读者把文件保存为.py运行即可看到效果。4.2 Frontmatter 元数据规范每篇教程文件头部都有 YAML frontmatter。以 es/pyqt.md 为例contributors: - [Nathan Hughes, https://github.com/sirsharpest] translators: - [Adrian Rocamora, https://github.com/adrianrocamora]仓库的 lint/frontmatter.py 会对所有 Markdown 文件的 frontmatter 做校验允许的键为name、where_x_eq_name、category、filename、contributors、translators且contributors/translators必须是作者名 主页链接的成对列表结构见 lint/frontmatter.py。这意味着每篇教程必须正确署名原作者与各语言译者。英文原版 pyqt.md 还额外标注了category: framework与filename: learnpyqt.py建议保存的文件名。4.3 多语言版本一致性对比 pyqt.md、es/pyqt.md 与 zh-cn/pyqt.md 可以看出各语言版本的代码块完全一致差异仅在注释语言与个别措辞如西班牙语版把标签文字改为 Hello World! 保持与英文一致意大利语版则译为 Ciao Mondo!。这为跨语言对照学习提供了极佳素材——如果你正在学西班牙语或英语可以边读注释边对照同一份代码。五、从这两个示例出发的下一步基于上述骨架你可以自然地向以下方向扩展均为 PyQt 的标准能力可结合仓库中各语言教程继续深挖布局管理当前示例用move()手工定位控件。真实应用应改用QVBoxLayout、QHBoxLayout或QGridLayout让窗口缩放时控件自动重排避免坐标写死。携带参数的信号clicked信号可携带bool参数更复杂的交互可自定义信号pyqtSignal实现控件间解耦通信。对话框返回值QDialog支持accept()/reject()与exec_()返回值配合用于判断用户点了确定还是取消。升级到新版绑定PyQt5/PyQt6 将控件类拆分到QtWidgets模块、枚举归入QtCore.Qt迁移时需调整 import 路径与个别 API 命名但事件循环、信号槽与模态模型的核心思想完全一致。六、小结通过 es/pyqt.md 这一份不足百行的教程你已经掌握了 PyQt 应用的全部核心要素QApplication与事件循环、控件树与父子坐标系、setGeometry/move的定位语义、信号与槽的连接方式以及不要加括号的易错点、QDialog与三种窗口模态的区别。这两个可运行示例不仅是入门模板也是后续所有 PyQt 项目的出发骨架——复制它们、修改它们、让窗口真正响应你的逻辑就是学习 Qt 跨平台 GUI 开发最快的方式。赞分享文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载相关推荐基于 Learn X in Y minutes 仓库的 PyQt 入门指南从 Hello World 到模态对话框基于 Learn X in Y minutes 仓库的 PyQt 入门指南从 Hello World 到模态对话框 本篇技术指南以开源仓库 learnxiny文档教程Learn X in Y Minutes 项目文档Learn X in Y Minutes 项目文档 1. 项目目录结构及介绍 learnxinyminutes docs 项目是一个开源文档项目旨在为各种编程文档教程Learn X in Y Minutes 系列TypeScript 语法速览——从 JavaScript 超集到静态类型实战Learn X in Y Minutes 系列TypeScript 语法速览——从 JavaScript 超集到静态类型实战 TypeScript 是一门面向文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考