使用導入鉤:
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
輸出:
$ 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'>
我不確定是否向項目添加了空的僞模塊。特別是因爲PySide/PyQt包含更多的子模塊。 –
@Guttalax你說這是測試,對吧?我不想在生產環境中做這樣的事情。如果你正在生產,那麼不要'輸入*'。沒有這一點,你可以做一些簡單的事情,比如'Qt/__ init __。py',其中'__init __。py'是來自PyQt4 import *'。那麼你可以參考一下'Qt.QtGui.QWidget()' – Nathan
好吧,是的,它是用於測試。你看,這是我的一個愛好項目,我不介意有點駭人聽聞的解決方案。理想情況下,我想爲其他人在pyside和pyqt之間切換或甚至讓程序使用可用的任何一種方法提供一種簡單方法。 –