【问题标题】:Is there a tutorial specifically for PyQt5? [closed]有专门针对 PyQt5 的教程吗? [关闭]
【发布时间】:2014-01-26 14:03:12
【问题描述】:

我正在寻找 PyQt5 教程。在没有教程的情况下,第一次使用 Python 开始 GUI 开发是相当复杂的。

到目前为止,我只找到了一些 PyQt4 教程,并且由于从 Qt4 到 Qt5 发生了一些变化,例如 SIGNALSLOT 在 Qt5 中不再支持这一事实,如果有针对 PyQt5 的特定教程会很好。

有人可以提供一个关于如何使用 PyQt5 开始 GUI 开发的教程吗?

【问题讨论】:

  • 这是一个开始,我已经尝试过查看那里,但它实际上更像是文档而不是教程。
  • @WeGi。你应该阅读Differences Between PyQt4 and PyQt5。一旦你理解了这一点,你就可以轻松地将 PyQt4 教程翻译成 PyQt5。事实上,这本身就是一个很好的学习练习。请注意,知道old-style signal and slot syntax 仍然很有用,因为您可以在Qt docs 中找到它。
  • @WeGi 我可能会迟到回答这个问题,但你可能对我找到的这个 PDF 感兴趣,同时也在尝试学习 PyQt5
  • @Justin 之前有人指示我明确表示这是要求提供教程,因此现在编辑它似乎是倒退了一步。此外,这是 Google 上最相关的链接,可获取良好的高级教程,并为 PyQt5 新手提供资源链接。 StackOverflow 的另一个好处可能会更加闪亮,当问题因过于严格的技术问题(或者可能是编辑徽章挖掘)而关闭时,如果教程的作者没有气馁。我会再次谦虚地问,请你重新-打开这个问题。感谢您的考虑。

标签: python user-interface qt5 pyqt5


【解决方案1】:

【讨论】:

  • 这不是一个很好的资源。该页面的唯一示例未正确缩进,因此无法正常工作。
  • 对我有用,也许他们修好了。
  • 也为我工作。但我真的很想知道如何将 Qt Designer 与 PyQt5 一起使用 --- 找不到任何分步示例,即您应该选择哪种项目模板.....
【解决方案2】:

一段时间以来一直在寻找 PyQt5 教程?不要再看了!你不会在互联网上找到很多。

不是真正的教程,而是非常不言自明的基本脚本,位于以下路径:

/python/lib/site-packages/PyQt5/examples

您将在30 文件夹中找到有关100 的示例,范围从初级到高级,涵盖基本窗口、菜单、选项卡、布局、网络、OpenGL 等。

【讨论】:

  • @katsh 谢谢。我会用你的链接更新我的答案。我忘记在我的回答中包含这一点,谢谢你(间接地)提醒我。
  • 我没有敲你的答案。将人们引向示例是正确的做法。
  • @hbdgaf 我知道你不是。我一点也不挑剔。这是正确的做法。我只是给任何路人留个便条,指出他们可以看到自己的时代。尽管如此,在尽量不把话放在嘴里或侮辱一个好的答案时很难说。不过,感谢您的拆解。小心! :)
  • pip3 在 MacOS X 上不安装示例。 /usr/local/lib/python3.6/site-packages/PyQt5/examples 不存在。
【解决方案3】:

随着我继续深入 PyQt5 的深度,我是否应该继续用我发现的一些更闪亮的宝藏来更新这个答案。

话虽如此,我现在正在快速介绍 PyQt5。我还将提供有用资源的链接。我也是这个框架的新手,我将详细说明我认为使用它的好策略,因为我想出了这个策略。可能还有其他好的策略,所以如果有人有什么要补充的,请发表评论。这是一项正在进行中的工作。


策略

我从另一个答案中建议的示例代码中学到了很多东西,但是这些示例没有帮助的是 PyQt5 的深层魔力。具有很多魔力的框架(PyQt5、Django、SQLAlchemy 等)非常棒,因为大量的苦差事从你身上抽离出来。另一方面,并​​不总是清楚到底发生了什么,或者你应该怎么做。

幸运的是,我们似乎有选择:

  • QtDesigner:当你的键盘着火时,安装包中会调用一个摇滚的 GUI-Builder。当您看到它生成的代码时(可能只在社区版本中?),您就会明白为什么这个可能不是它看起来的灵丹妙药。

  • QML:另一种灵丹妙药:从格式化的 JSON 构建声明性 GUI。嗯。

  • Qt Quick:QML 的框架。在这一点上,它可能看起来非常容易,但不要被这些东西所吸引。 它似乎总是归结为手工学习。

  • The Model-View Framework(1):模型视图(不是 MVC)将处理表示/交互的代码与管理数据的代码分开,目的是提供模块化。

PyQt5 中的编码通过使用实现模型-视图设计模式的一组类大大简化。 Model-View 是 Model-View-Controller (MVC) 的演进,其中 Controller 与 View 重新统一。他们看起来像是奇怪的伙伴,但是,大多数程序的逻辑处理用户或数据:这似乎有一定的意义,至少在平流层层面。

鸟瞰:

架构

模型-视图-控制器

这种广泛使用的设计模式将应用程序分为 3 层:

  1. 模型 ~> 封装数据。通知 View 和 Controller 对基础数据的任何更改。这会分别更新输出或可用命令的显示。
  2. 查看 ~> 将模型的相关输出显示给用户。
  3. Controller ~> 封装用户交互,并通知 Model 和 View 相关事件。

模型-视图

  • The Graphics View Framework(1) ~> 将 QGraphicsScene 中的所有内容(包括嵌入的 QWidget 等)表示为 QGraphicsItem(或其派生项),包括用于嵌入小部件的代理类。这些项目据说是高度优化的,并且集成 OpenGL 支持是单行的,这很好。

这种设计模式将控制器放在视图中。这样,视图就能够处理整个用户交互。具体来说,就是信号和槽机制。

用户交互管理

回调

信号和槽

..... ** 对不起,我现在必须签字。我会回来继续添加这个。 **

实际例子

例如,您可以从 itemviews/editabletreemodel 示例中获取树视图,然后从 itemviews/dirview 示例中换入文件系统模型 (QFileSystemModel),然后您就获得了完整(工作)视图你的目录树。相当时髦。

因此,您将从可编辑树模型示例中获取代码:

headers = ("Title", "Description")

file = QFile(':/default.txt')
file.open(QIODevice.ReadOnly)
model = TreeModel(headers, file.readAll())
file.close()

self.view.setModel(model)

...并从 dirview 中交换模型:

model = QFileSystemModel()
model.setRootPath('')
self.view.setModel(model)

...它只是工作。惊人的。

下一步(就我而言)(*我认为)是实现一个自定义模型,然后我将同时使用多个视图,但我不知道这是否适合您的用例。

资源

这是我在旅行中发现的一些宝石。希望他们对您有所帮助。

This is a tutorial on Model-View for Qt5.(1)这是来自Qt5官方文档的非常详细的文档。在 Qt5 站点上可以找到大量有用的文档。请记住,它是针对 Qt5(C++ 库)的,但是读起来差别不大(无论如何 PyQt5 官方文档都指向那里)。

This PDF contains a quick high-level to PyQt4's Model-View framework. 请注意,它适用于 PyQt4(不是 PyQt5),但它实际上适用于 Python(而不是 C++),我发现它很快教会了我很多东西。

我刚开始使用图形视图,我发现this tutorial on the Graphics View Framework 非常有用。这与qtdemo 示例代码中用于生成一些平滑效果的视图相同。我稍后会更新这个。

This is a complete list of all of the Qt5 Modules.

This is a complete list of all of the Qt5 Classes.

This is a complete list of all functions in the Qt5 API.

正如 katsh 在另一个答案的 cmets 中指出的那样,here is a link to the example code for PyQt5.2.1 on GitHub

此外,示例代码的副本随您的发行版一起提供,可以在以下位置找到:

%PYTHON_HOME%\Lib\site-packages\PyQt5\examples

如果您使用的是 PyDev (Eclipse),您只需在 PyDev Package Explorer 或 Navigator 中右键单击示例的主模块文件即可运行示例 =:> Run As =:> Python Run

在我(不是那么)拙见中,最好的一个是:

%PYTHON_HOME%\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.py

在我当前的项目中,我正在对这个示例进行逆向工程。如果你检查一下,你就会明白为什么。待续.. ;)

享受吧!

【讨论】:

  • 在了解更多有关 PyQt5 的信息后,我很快会重新编写整个答案。所以请不要投反对票。我知道它很乱,我会清理它:P
  • 完成了大量的重写。还没写完,等会回来继续……(等我删了这些cmet)
  • 已经2年了。我想知道您是否有兴趣更新此答案。我可以帮忙,但我对 PyQt5 了解不多,我所做的每一次搜索最终都会让我回到这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2018-02-19
  • 2011-02-22
  • 1970-01-01
  • 2011-04-02
相关资源
最近更新 更多