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

WeG*_*eGi 63 python user-interface qt5 pyqt5

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

到目前为止我只找到了一些PyQt4教程,并且由于Qt4到Qt5的变化,例如事实SIGNAL并且SLOT在Qt5中不再支持,所以为PyQt5提供特定的教程会很好.

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

Inv*_*sus 71

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

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


战略

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

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

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

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

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

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

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

从鸟瞰:

架构(S)

模型 - 视图 - 控制器

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

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

模型 - 视图

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

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

用户交互管理

回调

信号和插槽

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

实际例子

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

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

headers = ("Title", "Description")

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

self.view.setModel(model)
Run Code Online (Sandbox Code Playgroud)

...并从dirview交换模型:

model = QFileSystemModel()
model.setRootPath('')
self.view.setModel(model)
Run Code Online (Sandbox Code Playgroud)

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

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

资源

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

这是关于Qt5的Model-View的教程.(1)这是官方Qt5文档中非常详细的文档.在Qt5网站上可以找到大量有用的文档.请记住,它适用于Qt5(C++库),但读取的差异是微不足道的(无论如何PyQt5官方文档指向那里).

此PDF包含PyQt4的Model-View框架的快速高级.注意它是PyQt4(不是PyQt5),但它实际上是Python(而不是C++),我发现它很快就教会了我很多.

我刚刚开始使用Graphics View,我在Graphics View Framework上发现这个教程非常有帮助.这与qtdemo示例代码中用于生成一些光滑效果的视图相同.我会稍微更新一下.

这是所有Qt5模块的完整列表.

这是所有Qt5类的完整列表.

这是Qt5 API中所有功能的完整列表.

正如katsh在另一个答案的评论中指出的那样,这里是GitHub上PyQt5.2.1的示例代码的链接

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

%PYTHON_HOME%\Lib\site-packages\PyQt5\examples
Run Code Online (Sandbox Code Playgroud)

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

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

%PYTHON_HOME%\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.py
Run Code Online (Sandbox Code Playgroud)

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

请享用!

  • 完成了大量重写的大部分内容.它还没有完成,我将在稍后再回来......(当我这样做时,我会删除这些评论) (2认同)
  • 已经两年了 我想知道您是否有兴趣更新此答案。我可以帮忙,但对PyQt5的了解不多,每次搜索都会使我最终回到这里。 (2认同)

小智 28

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

不是真正的教程,而是在以下路径下的相当不言自明的基本脚本:

/ Python的/ lib目录/站点包/ PyQt5 /例子

你会发现从初学者到高级的文件夹中的100例子30,涵盖基本的窗口,菜单,选项卡,布局,网络,OpenGL等.

  • 也可以在这里找到https://github.com/baoboa/pyqt5/tree/master/examples (9认同)
  • MacOS X上的`pip3`没有安装示例。/usr/local/lib/python3.6/site-packages/PyQt5/examples不存在。 (2认同)