PyQt - проблемы с импортом QtDeclarative

Я использую Ubuntu 10.10 и установил PyQt 4.7.4 через apt-get.

Я создаю макет графического интерфейса с помощью QtDesigner и компилирую файл .ui в .py с помощью pyuic4.

Затем я создаю подкласс автоматически сгенерированного класса и реализую конструктор подкласса. Я вызываю setupUi() и затем получаю следующую ошибку и трассировку стека:

$ python src/gui/main_window.py 
Traceback (most recent call last):
  File "src/gui/main_window.py", line 2, in <module>
    from ui_main_window import Ui_MainWindow
  File "/home/dmass/sandbox/test/src/gui/ui_main_window.py", line 694, in <module>
    from QtDeclarative.QDeclarativeView import QDeclarativeView
ImportError: No module named QtDeclarative.QDeclarativeView

Кроме того, когда коллега компилирует файл .ui в .py с помощью pyuic4 из установки PyQt 4.8.3 в Windows, я получаю следующую ошибку:

$ python src/gui/main_window.py  
Traceback (most recent call last):  
  File "src/gui/main_window.py", line 2, in <module>  
    from ui_main_window import Ui_MainWindow  
  File "/home/dmass/sandbox/test/src/gui/ui_main_window.py", line 705, in <module>  
    from PyQt4 import QtDeclarative  
ImportError: cannot import name QtDeclarative

Похоже, что QtDeclarative не был установлен (или не там, где ожидает Python), когда я установил PyQt. Но как ни странно, я не смог найти никого с такой же проблемой в моем поиске Google.

Кто-нибудь знает, что здесь происходит? Спасибо за вашу помощь!

Дэйв


person Dave Masselink    schedule 24.02.2011    source источник
comment
Кроме того... я должен сказать, что у меня нет проблем с импортом любых других модулей PyQt (например, PyQt4.QtCore или PyQt4.QtGui).   -  person Dave Masselink    schedule 25.02.2011
comment
Можете ли вы показать свой файл .ui? Возможно, вы используете какой-то компонент, производный от чего-то в QtDeclarative. (Я не получаю QtDeclarative, когда я генерирую .py из .ui, используя pyuic4.)   -  person Vinay Sajip    schedule 25.02.2011
comment
@Vinay: Вы задали правильный вопрос. Я спрашивал неправильно все время! Почему IS pyuic4 пытается включить QtDeclarative. Это должно быть связано с чем-то, что я использую в своем файле .ui. ТЫ ПРАВ! Я снова просмотрел .ui и увидел, что мой коллега, использующий Windows, включил элемент виджета, который называется QDeclarativeView. В моей версии QtDesigner даже нет виджета такого типа. В любом случае, после того, как я удалил это, pyuic4 не включает импорт ... и я, наконец, могу без проблем запускать свой код! Спасибо за правильный вопрос.   -  person Dave Masselink    schedule 25.02.2011


Ответы (2)


Где-то в вашей системе Ubuntu должен быть каталог с именем QtDeclarative. Убедитесь, что он находится в вашем PYTHONPATH. Нечто подобное нужно сделать на машине Windows для PyQt4.

person nmichaels    schedule 24.02.2011
comment
Каталог QtDeclarative существует... но я не думаю, что это из установки PyQt... Я думаю, что это только из Qt. Он находится в /usr/include/qt4/QtDeclarative. - person Dave Masselink; 25.02.2011
comment
@Dave: В нем есть файл __init__.py? - person nmichaels; 25.02.2011
comment
@nmichaels: Нет, это не так. Нужно ли делать что-то особенное для установки модуля QtDeclarative пакета PyQt4? - person Dave Masselink; 25.02.2011
comment
@Dave: у меня нет под рукой коробки Ubuntu, но в apt-кэше моей коробки Debian вообще нет слова QtDeclarative. Его пакет PyQt4, похоже, не включает его. Возможно, вам придется скачать его с сайта maemo. - person nmichaels; 25.02.2011
comment
@nmichaels: Я мог бы попробовать это ... ИЛИ ... знаете ли вы, как настроить pyuic4 для генерации кода .py, который не использует (относительно новую) функцию QtDeclarative? - person Dave Masselink; 25.02.2011
comment
@ Дэйв: Не могу сказать. Хотя это может стать хорошим отдельным вопросом. - person nmichaels; 25.02.2011

В Ubuntu 10.10 (Maverick) в пакете python-qt4 нет привязки QtDeclarative в список файлов. Но QtDeclarative.so присутствует в Ubuntu 11.04 (Natty).

Так что в этом случае вы можете обновить всю свою ОС до Natty или попытаться вручную скопировать и вставить этот файл в путь к Python.

ОБНОВЛЕНИЕ. Только что попытался сделать это в моем Debian Squeeze, но не удалось из-за зависимости libqt4-declarative. Однако для Ubuntu Maverick уже есть maverick/libqt4-declarative.

PS. Но вы должны знать, что ручное копирование не является предпочтительным способом.

person ajukraine    schedule 19.04.2012