如何在运行时轻松选择PyQt或PySide?

Joh*_*own 5 python python-module pyqt pyside

我想在一个源文件QT.py中做类似的事情:

import sys
import PyQt4

sys.modules["Qt"] = PyQt4
Run Code Online (Sandbox Code Playgroud)

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

import QT
from Qt.QtCore import *
Run Code Online (Sandbox Code Playgroud)

所以我可以在QT.py中从PyQt4更改为PySide而不触及所有源文件(可能有丑陋的sed脚本)这些模块主要是API兼容,我想测试它们.是否有捷径可寻?(因为我尝试的方式不起作用)

也许我需要imp模块,但它看起来太低了.

Nat*_*han 2

更新:找出更符合您要求的方法:

您可以将伪模块构造为:

Qt/
Qt/__init__.py
Qt/QtCore/__init__.py
Qt/QtGui/__init__.py
Run Code Online (Sandbox Code Playgroud)

哪里Qt/__init__.py

import QtCore, QtGui
Run Code Online (Sandbox Code Playgroud)

Qt/QtCore/__init__.py是:

from PyQt4.QtCore import *
Run Code Online (Sandbox Code Playgroud)

Qt/QtGui/__init__.py是:

from PyQt4.QtGui import *
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码中,您可以按如下方式引用它:

import sys
from Qt import QtGui
app = QtGui.QApplication(sys.argv)

from Qt.QtGui import *

window = QWidget()
window.show()

app.exec_()
Run Code Online (Sandbox Code Playgroud)

强烈建议不要from Qt.QtGui import *在代码中使用导入所有内容被认为是不好的形式,因为您会在此过程中丢失所有名称空间。

更新:我喜欢 Ryan 关于条件导入的建议。我建议将其合并到上面的代码中。例如:

Qt/QtGui/__init__.py:

import sys
if '--PyQt4' in sys.argv:
    from PyQt4.QtGui import *
else:
    from PySide.QtGui import *
Run Code Online (Sandbox Code Playgroud)