从PySide或PyQt4导入

时间:2014-09-12 16:53:23

标签: python pyqt pyqt4 pyside python-import

我想使用PyQt4或PySide进行导入,无论安装哪个。出于某种原因,虽然我不能这样做:

from PyQt4 import QtGui
from QtGui import QApplication

而不是最后一行,我必须这样做,我不确定原因:

from PyQt4.QtGui import QApplication

这并不会让我感到太烦恼,但是使用任何安装的库导入多个东西会非常令人沮丧:

try:
    from PyQt4 import QtGui, QtWebKit, QtCore
    from PyQt4.QtGui import QApplication, QMainWindow, QFrame, QAction, ...
    ...
except ImportError:
    from PySide import QtGui, QtWebKit, QtCore
    from PySide.QtGui import QApplication, QMainWindow, QFrame, QAction, ...
    ...

它变得非常重复。

此外,这不起作用,Python不会允许它:

import PyQt4 as SomeQt
from SomeQt import QtGui

因此,我无法找到减少PyQt4和PySide部分之间重复的好方法。有没有更好的办法?使用import *是否有任何危害:

try:
    from PyQt4 import QtGui, QtWebKit, QtCore
    from PyQt4.QtGui import *
    ...
except ImportError:
    from PySide import QtGui, QtWebKit, QtCore
    from PySide.QtGui *
    ...

至少减少必要的重复次数?

1 个答案:

答案 0 :(得分:1)

我会这样做:

try:
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    ...
except ImportError:
    from PySide.QtCore import *
    from PySide.QtGui import *
    ...

...
QThread()
QApplication()
QWidget()
...

Python社区和最佳实践通常不鼓励进口野生动物。原因是您不必要地污染您的命名空间。就我个人而言,我不关心Qt,因为每个班级名称都以Q开头,例如QSomething。这使得我认为不太可能与我或第三方模块中的其他类名冲突。

为了安全起见,您还可以执行以下操作:

try:
    from PyQt4 import QtCore as Qc
    from PyQt4 import QtGui as Qg
    ...
except ImportError:
    from PySide import QtCore as Qc
    from PySide import QtGui as Qg
    ...

...
Qc.QThread()
Qc.QApplication()
Qg.QWidget()
...