是否有专门针对PyQt5的教程?

时间:2014-01-08 12:51:15

标签: python user-interface qt5 pyqt5

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

到目前为止我只找到了一些PyQt4教程,并且由于Qt4到Qt5的变化,例如Qt5中不再支持事实SIGNALSLOT,所以具体到PyQt5的教程。

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

3 个答案:

答案 0 :(得分:69)

随着我继续深入PyQt5的深入,我将继续用我发现的一些更有光泽的宝藏来更新这个答案。

话虽这么说,我现在正在采取一个粗略的草案"快速介绍PyQt5。我还将提供有用资源的链接。我也是这个框架的新手,我将详细阐述我认为使用它的一个好策略,因为我想出了这个策略。可能还有其他好的策略,所以如果有人要添加任何内容,请发表评论。这非常重要。


策略

我从其他答案中建议的示例代码中学到了很多东西,但是示例无法帮助的是PyQt5的深层魔法。其中有很多魔法的框架(PyQt5,Django,SQLAlchemy,......)非常棒,因为大量的苦差事被抽象出来。另一方面,并​​不总是清楚到底是怎么回事,或者你应该怎么做。

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

  • QtDesigner:在你的键盘着火的那些日子里,有一个摇滚乐。在安装包中调用GUI-Builder。当你看到它产生的代码时(可能只在社区版本中?),你就会明白为什么可能不是它看起来的万能药。

  • QML:灵丹妙药的另一个候选者:从格式化的JSON构建声明式GUI。荫

  • Qt Quick:QML的框架。到目前为止,它看起来非常简单,但是还没有被这些东西所吸引。 似乎总是手工学习它。

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

通过使用实现模型 - 视图设计模式的类集,大大简化了PyQt5中的编码。 Model-View是模型 - 视图 - 控制器(MVC)的演变,其中Controller已与View重新组合。他们看起来像是同床异梦,但是,大多数程序的逻辑 处理用户或数据:它似乎具有某种意义,至少在平流层面。

从鸟的眼睛:

体系结构(S)

<强>模型 - 视图 - 控制器

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

  1. 模型 〜&gt;封装数据。通知View和Controller对基础数据的任何更改。这会分别更新输出或可用命令的显示。
  2. 查看 〜&gt;显示模型的相关输出给用户。
  3. 控制器 〜&gt;封装用户交互,并通知相关事件的模型和视图。
  4. <强>模型 - 视图

    • The Graphics View Framework(1)〜&gt;将QGraphicsScene中的所有内容(包括嵌入式QWidgets等)表示为QGraphicsItem(或其衍生物),包括用于嵌入窗口小部件的代理类。这些项目据说是高度优化的,并且集成OpenGL支持是一个单行,这很好。

    此设计模式将Controller置于View中。这样,视图能够处理用户的整个交互。具体而言,这些是信号和插槽机制。

    用户交互管理

    回调

    信号和插槽

    ..... **我很抱歉,但我现在必须签字。我会回来继续加入这个。 **

    实践示例

    例如,您可以从itemviews/editabletreemodel示例中获取树视图,然后从QFileSystemModel示例交换文件系统模型(itemviews/dirview),并且您可以使用headers = ("Title", "Description") file = QFile(':/default.txt') file.open(QIODevice.ReadOnly) model = TreeModel(headers, file.readAll()) file.close() self.view.setModel(model) 示例。已经获得了目录树的完整(工作)视图。漂亮时髦。

    因此,您将从editabletreemodel示例中获取代码:

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

    ...并从dirview交换模型:

    qtdemo

    ......它只是有效。惊人。

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

    资源

    以下是我在旅行中发现的一些宝石。希望他们帮助你。

    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非常有用。这与%PYTHON_HOME%\Lib\site-packages\PyQt5\examples 示例代码中用于生成一些光滑效果的视图相同。我稍后会更新这个。

    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在另一个回答的评论中所指出的,here is a link to the example code for PyQt5.2.1 on GitHub

    此外,您的发行版附带了示例代码的副本,可在以下位置找到:

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

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

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

    {{1}}

    在我目前的项目中,我正在进行逆向工程这个例子。如果你看看它,你就会明白为什么。继续..;)

    享受!

答案 1 :(得分:27)

一直在寻找PyQt5教程?别再看了!你不会在互联网上找到很多。

不是真正的教程,但在以下路径中非常容易理解的基本脚本

  

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

你会在100个文件夹中找到30个例子,从初级到高级,包括基本窗口,菜单,标签,布局,网络,OpenGL等。

答案 2 :(得分:8)