如何在运行时轻松地在 PyQt 或 PySide 之间进行选择?

2023-11-25

我想在一个源文件 QT.py 中执行类似的操作:

import sys
import PyQt4

sys.modules["Qt"] = PyQt4

然后将此文件导入到其他源文件中,并像这样使用它:

import QT
from Qt.QtCore import *

所以我可以在 QT.py 中从 PyQt4 更改为 PySide,而无需触及所有源文件(使用可能丑陋的 sed 脚本) 这些模块大多是 API 兼容的,我想对它们进行测试。是否有捷径可寻? (因为我尝试的方法都行不通)

也许我需要的imp模块,但似乎级别太低。

有任何想法吗?


使用导入钩子:

def set_qt_bindings(package):
    if package not in ('PyQt4', 'PySide'):
        raise ValueError('Unknown Qt Bindings: %s' % package)
    import __builtin__
    __import__ = __builtin__.__import__
    def hook(name, globals=None, locals=None, fromlist=None, level=-1):
        root, sep, other = name.partition('.')
        if root == 'Qt':
            name = package + sep + other
        return __import__(name, globals, locals, fromlist, level)
    __builtin__.__import__ = hook

if __name__ == '__main__':

    import sys

    if len(sys.argv) > 1:

        set_qt_bindings(sys.argv[-1])

        import Qt
        print Qt

        from Qt import QtCore
        print QtCore

        from Qt.QtGui import QWidget
        print QWidget

Output:

$ python2 test.py PySide
<module 'PySide' from '/usr/lib/python2.7/site-packages/PySide/__init__.py'>
<module 'PySide.QtCore' from '/usr/lib/python2.7/site-packages/PySide/QtCore.so'>
<type 'PySide.QtGui.QWidget'>
$ python2 test.py PyQt4
<module 'PyQt4' from '/usr/lib/python2.7/site-packages/PyQt4/__init__.pyc'>
<module 'PyQt4.QtCore' from '/usr/lib/python2.7/site-packages/PyQt4/QtCore.so'>
<class 'PyQt4.QtGui.QWidget'>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行时轻松地在 PyQt 或 PySide 之间进行选择? 的相关文章

随机推荐

  • 从 Rprof() 获取更多信息

    我一直在尝试深入研究我编写的一些 R 代码中的时间消耗 所以我使用Rprof 但输出还不是很有帮助 gt summaryRprof by self self time self pct total time total pct lt dat
  • 是否可以分别推送不同架构的docker镜像?

    据我所知docker buildx build push将用您在中指定的架构覆盖现有的映像架构 platform范围 据我了解 在使用时必须同时构建和推动所有架构buildx 但是 我知道官方 docker 镜像使用arm64构建农场来构建
  • Null 不是一个使用 Expo 的对象(评估 'RNFetchBlob.DocumentDir')

    我正在使用 Expo 并尝试使用react native fetch blob 下载文件 import RNFetchBlob from rn fetch blob RNFetchBlob fetch GET http www exampl
  • 透明背景 JFrame Linux 上的动画

    我想为 Frame 或 JFrame 创建完全透明的背景并让它显示透明动画 我设法让它在 Windows 7 x64 中运行 但相同的代码无法在我的 Linux Lubuntu x64 15 04 上运行 下面的代码显示了我想要实现的目标
  • 我该怎么做:使用@databaseName

    DECLARE DatabaseName NVARCHAR max SET DatabaseName MainDb USE DatabaseName 行不通 怎样制作呢 如果你想像这样动态地执行它 你必须使用动态 SQL 意味着您想要在该数
  • 我们可以给静态数组的大小一个变量吗

    大家好 我想问一下 我已经读到 我们只能通过使用指针并使用 malloc 或 newlike 来声明动态数组 int array new int strlen argv 2 但我已经写了 int array strlen argv 2 它没
  • FFMPEG 命令在 Android Q 中不起作用

    尝试此命令来合并两个音频文件 但它在 Android 10 0 Q 中不起作用针对 SDK 29 但是 这个命令完全有效针对 sdk 24 至 28 我正在使用这个 FFMPEG 实现库 nl bravobit android ffmpeg
  • 将 JSON 显示为 HTML [关闭]

    Closed 这个问题是无关 目前不接受答案 关于如何将 JSON 嵌入到 HTML 页面中 并将 JSON 格式化为人类可读的样式 有什么建议吗 例如 当您在浏览器中查看 XML 时 大多数浏览器都会显示 XML 格式 缩进 正确的换行符
  • jquery如何做一个翻转效果?

    我试图模仿通常在移动设备上发现的效果 在移动设备上有一个面板 当您单击按钮时 它会旋转 而在另一侧它有一些其他信息 我发现了一些使用 css 转换的代码这是一个例子 the js signup on click function e e p
  • Perl6:获取 Perl5 模块的数组引用

    我正在尝试使用 Excel Writer XLSX 在 Perl6 中编写 Excel 笔记本 我正在使用 Inline Perl5 通过use Excel Writer XLSX from
  • Xcode 6 不显示 iOS 7.1 模拟器

    我在 Mac OS X 10 9 5 上拥有 Xcode 版本 6 0 1 6A317 以及所有 iOS 8 模拟器 我还下载了 iOS 7 1 模拟器 我正在开发一个适用于 iOS 8 和 iOS 7 的应用程序 我遇到的问题是 Xcod
  • Python copy.deepcopy() 函数无法正常工作[重复]

    这个问题在这里已经有答案了 我一直在使用深度复制功能和复制功能 并且我对它们都遇到了同样的问题 这就像副本是引用 或指针 而不是正确的副本 我正在Python中处理数据记录 类 也许可能是这样 我给你看一个例子 gt gt gt impor
  • 如何使用 ggplot2 从 qcc 包重现 pareto.chart 图?

    我一直在使用 R 中 qcc 包中的 pareto chart 函数 我真的很喜欢它 现在我想移植所有图形以使用 ggplot2 包 然而 尽管有出色的文档 但我对 ggplot2 的了解非常有限 因此我无法弄清楚所有细节 基本上我想要一个
  • 如何生成 a[i] != i 的排列?

    假设我有一个整数数组int a 0 1 N 1 where N的大小是a 现在我需要生成所有排列a s that a i i对全部0 lt i lt N 你会怎么做 下面是一些 C 实现的算法 该算法基于递归的双射证明 n n 1 n 1
  • Android 通用用户代理 (UA)

    我正在构建一个 Android 应用程序来显示来自服务器的内容源 服务器是一个移动网站 例如http m google com 它跟踪来自各种移动客户端的流量 为了区分 Android 客户端 如何为我的应用程序提供通用字符串 这就是我问这
  • 是否可以在索引视图中使用 LabelFor 作为标题行

    我正在尝试在 ASP NET MVC 索引视图中利用 DataAnnotation 值 有趣的是 代码生成器使用字段名称 例如 BlogPost 而不是Html LabelFor m gt Model ColumNames BlogPost
  • java中整数线程递增是安全的吗?

    Java代码 public class IncreaseTest public static int value 0 public synchronized int increment return value 是方法increment 线
  • 如何从 Java 代码中编写乐观锁和悲观锁

    我知道什么是乐观锁和悲观锁 但是当你编写java代码时你会怎么做呢 假设我将 Oracle 与 Java 结合使用 JDBC 中是否有任何方法可以帮助我做到这一点 我将如何配置这个东西 任何指示将不胜感激 您可以通过这种方式在数据库表中实现
  • 如果文件名为 _ViewStart.cshtml,Razor 布局将不起作用

    我有一个 MVC3 Web 应用程序 我想开始使用整个 Razor 视图 该网站的大部分内容都可以与 Site Master 配合使用 因此我已将其大部分内容打包到部分视图中 并尝试添加具有相同内容的布局 阅读 Scott Gu 的博客后
  • 如何在运行时轻松地在 PyQt 或 PySide 之间进行选择?

    我想在一个源文件 QT py 中执行类似的操作 import sys import PyQt4 sys modules Qt PyQt4 然后将此文件导入到其他源文件中 并像这样使用它 import QT from Qt QtCore im