2014-09-12 2 views
0

Я бы хотел использовать PyQt4 или PySide для импорта, в зависимости от того, что установлено. По некоторым причинам, хотя я не могу это сделать:Импорт из PySide или PyQt4

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. Есть ли способ лучше? Есть ли какой-либо вред в только с помощью импорта *:

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

, по крайней мере, сократить количество повторений, необходимых?

+0

Нету никакого вреда в этом обычно, однако один раз в то время как делать 'импорт *' не вызовет конфликт имен и поэтому класс/функция может не так, как вы ожидаете. – robbrit

ответ

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() 
... 
Смежные вопросы