使用Qt.qy进行开发

这篇文章旨在介绍Qt.py项目,以及如何配置完成用于PySide / PyQt4和PySide2 / PyQt5开发。

Qt.py是什么?

Qt.py是一个简约的 Python 2 & 3 库,用来动态调用所有的Qt绑定 - PySide,PySide2,PyQt4和PyQt5 - 它使您能够在编写软件时,动态选择可用的最可取的Qt绑定。

基本上,这意味着你需要导入PySide时,你可以导入Qt.py Python模块例如:

这样,你可以导入全部的PySide模块,例如要导入QtGui和QtCore,那将可以这样使用:

在你没有明确指定调用PySide或者PyQt时,如果你的代码遵循Qt.py的规则,无论你安装了PySide还是PyQt,你的代码都可以运行。Qt.py将检测你安装了那些python的Qt绑定,并去使用它。

请注意,你可以通过设置QT_PREFERRED_BINDING环境变量来设置Qt.py调用的首选偏好。

当使用Qt.py时,你必须遵循某些规则来使你的代码工作。例如,如果你要编写PySide2的代码,那么你需要如下的编写:

无论你是在Windows,macOS还是Linux,Python 2或Python 3,PySide,PyQt4,PySide2或PyQt5上使用Qt.py,上述代码都可以成功运行。

在新的Qt5的python绑定(PySide2和PyQt5)中,QtGui的所有窗口小部件类被移动到QtWidgets这个类当中。我敢说,这是最大的向后兼容性的突破变化之一,你不得不去使用Qt.py对你现有的代码进行处理。

当然,在这些Qt的python绑定之间会有不同的差异,Qt.py并不会完全处理。当你遇到问题的时候,你可以查询正在使用的Qt绑定,并为这种情况创建针对性的特定的代码,例如,当涉及到Qt4和Qt5的时候:

有关更多的如何将你旧的基于PySide/PyQt4的脚本转化为基于Qt.py工作环境的更多内容,请查询作者之前的一篇帖子Dealing with Maya 2017 and PySide2

它是如何工作的?

简而言之,Qt.py在Python脚本运行过程中,将Python环境中,可以用的(或者首选的)Qt的Python绑定来替换自己。但是,Qt.py将首先处理调用的重新映射,以便与PySide2的Qt5样式语法得以工作,即便你在使用Qt4的Python绑定的环境下运行这些代码。一些增强功能,如自动为PyQt4启用sip API V2功能并提供其他方便的功能也是Qt.py的特性,以便于提高不同的Qt绑定之间的代码兼容性。

更多的相关信息请参阅此项目中的README。

此完整的Python模块包含在Qt.py文件中,作者建议阅读它,以增加对Qt.py的工作原理的理解。作者认为它实际上并不是那么大,也并不是那么复杂。

安装Qt.py

首先,在安装之前,请确保你已经在你的python环境中安装了PySide,PySide2,PyQt4或者PyQt5。然后再继续安装Qt.py。

其中最关键的部分在于确保你的脚本可以找到Qt.py。有很多方案可以来实现这一点,但是下面两个步骤可能是最简单的一种:

1. 下载Qt.py然后存放在你想存放的位置。

2. 添加刚刚的文件夹路径到PYTHONPATH环境变量中。

作者还概述了一些高级(通常更好)的方法,如何根据不同的需求来安装Qt.py安装请参阅:Installing Qt.py (advanced methods)。

注意

这里有些"陷阱"或者些需要注意的事项。我们会保持更新在CAVEATS.md文件中。

这个CAVEATS.md文件实际上是以这样的方式创建的,即它可以被解析并包含在项目中的Travis-CI tests测试中.这使我们能够更好地更新和记录需要注意的事项及找到其解决方法。

我们鼓励所有使用Qt.py的人报告任何此类警告以及解决方法(如果可用),以便它们可以被纳入CAVEATS.md中来和参与我们的测试。

为项目做贡献

如果你想为项目做贡献(通常,这意味着贡献Qt.py或CAVEATS.md以及tests.py),你可以fork这个存储库。 然后在你的fork中进行更改,最后创建一个pull请求。

我们很乐意为你提供测试请求。当进行pull请求时,Travis-CI将自动尝试运行tests.py文件中指定的测试。每个测试都将与其他测试隔离运行。 如果你不想为自己的分支启用Travis-CI,可以使用Docker容器来运行测试。 我建议使用这种方式,因为它比等待Travis快得多。 在README的开发者部分。

如果你的pull请求并没有立即被接受,请不要怪罪。 我们时常会审查pull请求,以确保它们对广大的用户群有价值。 有时我们在开发过程中走到了交叉口,需要决定Qt.py到底要走向何方。 这有时需要一些不断的回滚。永远不要忘记我们非常感激你花费了时间了来做一个pull请求,这将会使Qt.py变得更加好!

如果您有任何问题,请随时点击此处。 我们很想期待你对Qt.py的看法。

关于使用Qt.py的最后一点看法

关于PySide2的未来

这是PySide2的新官网,因为Qt公司接管了这个项目的开发。 再次可以留意它的最新状态和公告。 在此我可以看到PySide2不支持OpenGL。

PySide2在最近的开发中采取了强硬的转变,并宣布他们不会支持Python 2(虽然这并不是正式的公告,然而我听说了这样的消息)。 只要使用适当的编译器,PySide2然而还是有希望能与Python 2兼容的。并且在之前发布的Maya 2017中包含了Python 2以及PySide2,所以前面的猜测可能是正确的。 从PySide2 wiki在Github中得到这样的消息:

> ###为什么没有Python 2的PySide2?

因为Python 2扩展如PySide需要编译比较古老的MS Visual C++ 9 版本,这意味着所有链接的libs包括Qt都需要需要编译这个版本。 但是Qt5,PySide2包装的库,放弃了对Visual C++ 9的支持,并且代码不太可能使用它进行编译。 目前解决这个问题的唯一解决方案就是帮助开发和资助https//mingwpy.github.io/

由于PySide2有这么多的不确定性,并且还因为PyQt5可以通过pip直接进行安装,我个人打算将在任何可以使用Python 3和PyQt5的地方使用PyQt5。 然后我现在还在使用PySide2,例如在Autodesk Maya 2017以及PySide在Maya的早期版本当中。

QtQuick 和 PyQt4

即使QtQuick在PyQt4中可以使用,我还是不打算在PyQt4中使用它,并只在PyQt5使用QtQuick,在那里显然它能工作的更好。

qt调用import sys库_【开源库】使用Qt.py进行开发相关推荐

  1. qt调用import sys库_Python模块之 sys 模块

    引入 1.什么是 sys 模块 sys 模块是与 Python 解释器交互的一个接口 该模块提供对解释器使用或维护的一些变量的访问和获取 它提供了许多函数和变量来处理 Python 运行时环境的不同部 ...

  2. qt调用import sys库_QTCreator调用动态库实例

    在 linux 中, qt 里面已经集成了最新的开发平台 QT Creator ,下面是我练习调用动态 库( .so 文件)的例程: 1 .打开 QT Creator ,点击 File -> N ...

  3. iOS架构-cocoapods打包静态库(依赖私有库、开源库、私有库又包含静态库)(14)

    前言: iOS工程架构少不了cocoapods 对第三方库的管理,它有着很好的操作性和集中管理的特性.之前的写了不少Xcode 建静态库工程打包.a 和 .framework 的文章,但是我们要先建静 ...

  4. 百度地图之鼠标绘制工具条库(开源库)

    百度地图开发常用网站 1.百度地图开放平台 http://lbsyun.baidu.com/ 2.百度地图 Javascript API JavaScript API v3.0 http://lbsy ...

  5. c# 对象json互相转换_Go语言进阶之路(六):内置JSON库和开源库gjson

    Go语言内置了部分JSON函数,可以方便地在Go语言结构体实例和JSON字符串之间互相转换.这可比Java强多了. 不过Go语言内置的json库功能比较鸡肋,只能在结构体和JSON之间相互转换,没办法 ...

  6. Python学习笔记011_模块_标准库_第三方库的安装

    容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...

  7. python网络爬虫的第三方库_Python常用第三方库_网络爬虫、数据分析与WEB开发、机器学习...

    Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...

  8. gcc g++ Linux下动态库_静态库

    关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在 ...

  9. qt 运动控制软件 界面_开源库分享----一款跨平台图形界面的百度网盘不限速客户端...

    pan-light pan-light 是一款不限速的百度网盘客户端, 基于 golang + Qt5 开发. 本项意义在于探究 golang 在图形界面客户端; web 服务端; 事件调度, web ...

  10. java 第三方加解密库_开源加密解密库比较

    第一个:OpenSSL C语言实现,整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的. 作为一个基于密码学的 ...

最新文章

  1. android+qq登录测试,对于android的第三方(QQ登录,微信登录等的)测试时的签名配置...
  2. 今天闲来无事给我这老伙计A4L换个机油
  3. 关于系统自带 .NET Framework 版本的说明
  4. IOS_月薪10k以上知识大总结
  5. Tensorflow实践:用神经网络训练分类器
  6. Content-Type
  7. php的工作模式CGI,FastCGI,PHP-CGI与PHP-FPM(转)
  8. 服务器安装win7系统蓝屏,安装win7系统出现蓝屏| win7安装过程中蓝屏|安装win7系统时蓝屏...
  9. 多重环境下web.config配置管理解决方案
  10. 软件系统性能优化策略--SQL优化
  11. configure: error: xml2-config not found. Please check your libxml2 installation
  12. 微信小程序canvas 图片绘制
  13. [系统安全]《黑客免杀攻防》逆向基础之经典脱壳基础
  14. windows定时截屏小工具
  15. 下着雨的星期天下午,年素清一个人走在外面
  16. Android设置顶部状态栏颜色
  17. 大连海洋大学计算机考研资料汇总
  18. 空字符串:“”和null的区别。
  19. bootstrap table合并单元格mergeCell
  20. 中国联通大幅下调国际漫游费

热门文章

  1. 如何在Mac OS X上安装 Ruby运行环境
  2. 设计模式学习笔记之四:抽象工厂模式
  3. 高反差保留滤镜学习OpenCV:滤镜系列(11)——高反差保留
  4. 又是Access做怪,DateTime类型操作失败
  5. 结构化编程:跳转控制break、continue
  6. linux的forx函数-进程控制
  7. 20200131每日一句
  8. 每日一句090516
  9. 190322每日一句
  10. 扇贝有道180916每日一句