从PySide或PyQt4导入
我想用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 个回答
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()
...