Системная ошибка при запуске PyQt4 loadUi () - PullRequest
0 голосов
/ 09 марта 2011

Я довольно новичок в Qt, Python и их комбинациях.В настоящее время я пишу плагин QGIS на python (я использовал QtCreator 2.1 (Qt Designer 4.7) для генерации .ui-файла и сейчас пытаюсь использовать его для плагина Quantum GIS, написанного на Python 2.5 (и работающего в Quantum).Консоль ГИС Python 2.5)).У меня возникают проблемы при динамической загрузке UI-файла, когда программа запускает функцию loadUi ().Что меня отталкивает, так это то, что ошибка происходит за пределами моего сценария.Значит ли это, что я передаю что-то не так?Откуда появляется ошибка?Любые намеки на то, что может быть не так?

code_dir = os.path.dirname(os.path.abspath(__file__)) 
self.ui = loadUi(os.path.join(code_dir, "Ui_myfile.ui"), self)

Это код ошибки, который я получаю (без первого абзаца):

Файл "C: / Dokumente und Einstellungen / name.name / .qgis / python / plugins \myfile \ myfile_gui.py ", строка 42, в __ init __ self.ui = loadUi (os.path.join (code_dir," Ui_myfile.ui "), self)

Файл" C: \ PROGRA ~1 \ QUANTU ~ 1 \ apps \ Python25 \ lib \ site-packages \ PyQt4 \ uic__init __. Py ", строка 112, в loadUi возвращает DynamicUILoader (). LoadUi (uifile, baseinstance)

Файл" C: \ "PROGRA ~ 1 \ QUANTU ~ 1 \ apps \ Python25 \ lib \ site-packages \ PyQt4 \ uic \ Loader \ loader.py ", строка 21, в loadUi возвращает self.parse (имя файла)

Файл" C: \ PROGRA ~ 1 \ QUANTU ~ 1 \ apps \ Python25 \ lib \ site-packages \ PyQt4 \ uic \ uiparser.py ", строка 768, в синтаксическом акте (elem)

Файл" C: \ PROGRA~ 1 \ QUANTU ~ 1 \ apps \ Python25 \ lib \ site-packages \ PyQt4 \ uic \ uiparser.py ", строка 616, в createUserInterface self.traverseWidgetTree (elem)

Файл" C: \ PROGRA ~1 \ QUANTU ~ 1 \ apps \ Python25 \ lib \ site-packages \ PyQt4 \ uic \ uiparser.py ", строка 594, в traverseWidgetTreeобработчик (self, child)

Файл "C: \ PROGRA ~ 1 \ QUANTU ~ 1 \ apps \ Python25 \ lib \ site-packages \ PyQt4 \ uic \ uiparser.py", строка 233, в topWidget createWidget.setCentralWidget (widget) SystemError: ошибка возврата без исключения установлена ​​

1 Ответ

0 голосов
/ 11 марта 2011

Я не уверен, что может быть причиной этой конкретной проблемы, но использование файлов .ui напрямую для меня никогда не получалось - вместо этого я компилирую их в код на python, используя pyuic4 (должен быть на вашем пути, если ваш сайт PyQt4 - пакеты настроены правильно. Синтаксис следующий: -

pyuic4 -o <python output> -x <uic input>

-: файлы ресурсов можно аналогичным образом преобразовать в (не так понятный человеку) python, используя: -

pyrrc4 -o <python output> <qrc input>

-: Затем вы можете импортировать этот файл Python как модуль, не говоря уже о том, что чтение его кода может дать вам подсказки о том, как возиться с макетом во время выполнения.

Другим преимуществом этого является то, что вам не нужно анализировать xml во время выполнения - импорт модуля python выполняется намного быстрее, и вы вряд ли будете менять интерфейс где-либо поблизости так часто, как запускаете скрипт. Если вы оказались в такой ситуации, вы можете просто создать пакет для запуска их перед вашим скриптом / приложением.

Это метод, который я использую вместе с pyInstaller для развертывания сценариев, которые будут «просто запускаться» на XP, Vista и Windows 7 без изменений, и я генерирую модули python непосредственно перед компиляцией с pyInstaller, так что это может быть реальным экономия времени.

...