Ну вот и появился долгожданный релиз PySide. Некоторые хабравчане начнут им пользоваться в первый раз, некоторые уже имели с ним дело.
В своей работе приходится пользоваться кроссплатформенными визуализатором Mayavi и построителем графиков Chaco (кому интересно — читаем code.enthought.com/chaco и code.enthought.com/projects/mayavi). Моей задачей было встроить их фрэймы в свое приложение HPGL-GUI. Изначально я писал все на PyQt4 и в меня устраивало все, кроме одной вещи. Проблемой стала лицензия. PySide выпускается под LGPL v2.1, что как раз подходит под коммерческие нужды.
На помощь пришел PySide, который уже начали активно использовать в качестве бэкэнда к продуктам Enthought. Тут-то меня и ждали первые подводные камни.
Отсутствие документации как именно использовать PySide для встраивания.
Немного проблуждав по исходникам, выяснил, что достаточно указать переменную окружения 'QT_API' в значение 'pyside':
Несмотря на это работать приложение отказывалось. Полез править исходники. Изменений оказалось вроде бы и не так много, но отыскивать проблемы с нуля довольно противно и долго. Надеюсь дальнейшие инструкции помогут кому-то.
Первым делом нужно собрать пакеты из гита. Ставим себе PySide, git, subversion, setuptools, swig, numpy, scipy, vtk, wxpython. Для Windows также потребуется установить mingw (vtk и wxpython для Win советую взять отсюда для экономии времени www.lfd.uci.edu/~gohlke/pythonlibs ).
После всех этих манипуляций можно запустить пример.
Для Chaco: pastebin.ubuntu.com/575888
Для Mayavi: pastebin.ubuntu.com/575889
Скриншоты работающих виджетов:
P.S. Если кому-то интересно, могу написать статьи по возможностям и подводным камням Chaco и Mayavi.
В своей работе приходится пользоваться кроссплатформенными визуализатором Mayavi и построителем графиков Chaco (кому интересно — читаем code.enthought.com/chaco и code.enthought.com/projects/mayavi). Моей задачей было встроить их фрэймы в свое приложение HPGL-GUI. Изначально я писал все на PyQt4 и в меня устраивало все, кроме одной вещи. Проблемой стала лицензия. PySide выпускается под LGPL v2.1, что как раз подходит под коммерческие нужды.
На помощь пришел PySide, который уже начали активно использовать в качестве бэкэнда к продуктам Enthought. Тут-то меня и ждали первые подводные камни.
Отсутствие документации как именно использовать PySide для встраивания.
Немного проблуждав по исходникам, выяснил, что достаточно указать переменную окружения 'QT_API' в значение 'pyside':
import os
os.environ['QT_API'] = 'pyside'
Несмотря на это работать приложение отказывалось. Полез править исходники. Изменений оказалось вроде бы и не так много, но отыскивать проблемы с нуля довольно противно и долго. Надеюсь дальнейшие инструкции помогут кому-то.
Первым делом нужно собрать пакеты из гита. Ставим себе PySide, git, subversion, setuptools, swig, numpy, scipy, vtk, wxpython. Для Windows также потребуется установить mingw (vtk и wxpython для Win советую взять отсюда для экономии времени www.lfd.uci.edu/~gohlke/pythonlibs ).
- Скачиваем и кладем в папочку ETS, переходим в нее и клонируем репозитории:
git clone git://github.com/enthought/traits.git Traits
git clone git://github.com/enthought/traitsbackendqt.git TraitsBackendQt
git clone git://github.com/enthought/traitsbackendwx.git TraitsBackendWX
git clone git://github.com/enthought/traitsgui.git TraitsGUI
git clone git://github.com/enthought/enable.git Enable
git clone git://github.com/enthought/chaco.git Chaco
git clone git://github.com/enthought/mayavi.git Mayavi
git clone git://github.com/enthought/enthoughtbase.git EnthoughtBase
git clone git://github.com/enthought/envisagecore.git EnvisageCore
git clone git://github.com/enthought/envisageplugins.git EnvisagePlugins
git clone git://github.com/enthought/etsdevtools.git ETSDevTools
git clone git://github.com/enthought/blockcanvas.git BlockCanvas
git clone git://github.com/enthought/graphcanvas.git GraphCanvas
git clone git://github.com/enthought/codetools.git CodeTools
git clone git://github.com/enthought/apptools.git AppTools
git clone git://github.com/enthought/scimath.git SciMath - Запускаем сборку:
python ets.py develop
- Если сборка не удалась, то доустанавливаем нужные пакеты и перезапускаем скрипт
- После удачной сборки переходим в каталог Mayavi/enthought/tvtk/pyface/ui/qt4/
Открываем все файлы поочередно и изменяем импорт PyQt4 на PySide.
При желании можно пользоваться конструкцией вида:
import os
qt_api = os.environ.get('QT_API', 'pyqt')
if qt_api == 'pyqt':
from PyQt4 import QtGui, QtCore
else:
from PySide import QtGui, QtCore - В файле init.py из той же директории нужно закомментировать строки 26-30 с проверкой версии PyQt:
#if QtCore.QT_VERSION < 0x040200:
# raise RuntimeError, "Need Qt v4.2 or higher, but got v%s" % QtCore.QT_VERSION_STR
#if QtCore.PYQT_VERSION < 0x040100:
# raise RuntimeError, "Need PyQt v4.1 or higher, but got v%s" % QtCore.PYQT_VERSION_STR - правим файл TraitsBackendQt/enthought/traits/ui/qt4/ui_panel.py в строках 920-926 (функция __add_widget(...)):
if row < 0:
if isinstance(w, QtGui.QWidget):
layout.addWidget(w)
elif isinstance(w, QtGui.QLayout):
layout.addLayout(w)
else:
layout.addWidget(w) - Для тех, кто хочет работать под Win нужно подправить файл Mayavi\enthought\tvtk\pyface\ui\qt4\QVTKRenderWindowInteractor.py
Добавим в импорты:
from ctypes import pythonapi, c_void_p, py_object
pythonapi.PyCObject_AsVoidPtr.restype = c_void_p
pythonapi.PyCObject_AsVoidPtr.argtypes = [ py_object ]
и, пользуясь заменой текстового редактора, меняем str(int(self.winId())) на str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))
После всех этих манипуляций можно запустить пример.
Для Chaco: pastebin.ubuntu.com/575888
Для Mayavi: pastebin.ubuntu.com/575889
Скриншоты работающих виджетов:
P.S. Если кому-то интересно, могу написать статьи по возможностям и подводным камням Chaco и Mayavi.