Russian Qt Forum
Май 03, 2024, 06:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: PythonQt and Qt5  (Прочитано 30337 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Октябрь 08, 2014, 12:14 »

tuple возвращается мной. Ага, оказывается любая попытка установки в цикле вызывает ошибку, но тело цикла выполняется до конца и только потом выход по ошибке. Добавил последней строкой
Код:
print "test"
И печатается "test" потом ошибка. А если печатается obj - то и ошибка сбрасывается. Ну ни хрена себе...

Я искромсал исходники так
Код
C++ (Qt)
   static const QByteArray setterString("py_set_");
   PythonQtMemberInfo setter = wrapper->classInfo()->member(setterString + attributeName);
   if (setter._type == PythonQtMemberInfo::Slot) {
     // call the setter and ignore the result value
     void* result;
     PyObject* args = PyTuple_New(1);
     Py_INCREF(value);
     PyTuple_SET_ITEM(args, 0, value);
//      PythonQtSlotFunction_CallImpl(wrapper->classInfo(), wrapper->_obj, setter._slot, args, NULL, wrapper->_wrappedPtr, &result);
     PythonQtSlotFunction_CallImpl(wrapper->classInfo(), wrapper->_obj, setter._slot, args, NULL, wrapper->_wrappedPtr);
//
     Py_DECREF(args);
     return 0;
   }
 
По смыслу так - если игнорируем result, то чего его подаем (вызывая ошибку). А шо делать?
Записан
Pavel
Гость
« Ответ #16 : Июнь 08, 2015, 21:13 »

Чтобы собрать под виндами trunk r340 мне понадобилось изменить:
А вы не пробовали новую версию PythonQt (февральскую)?

Хочу собрать PythonQt на WinXP, но меня беспокоит следующая фраза на сайте проекта:
"On Windows, the (non-source) Python Windows installer can be used. Make sure that you use the same compiler as the one that your Python distribution is built with. If you want to use another compiler, you will need to build Python yourself, using your compiler." http://pythonqt.sourceforge.net/Building.html

Сказано, будто надо собирать Python из исходников, если хочется какой-нибудь другой компилятор помимо VS2008/VS2010 (которыми собраны Python 2/3). А я компилирую Qt-программы с помощью MinGW. Но читая эту ветку я понял, что для сборки PythonQt VS не обязателен, можно обойтись MinGW. Или это не так?
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #17 : Июнь 09, 2015, 09:46 »

А вы не пробовали новую версию PythonQt (февральскую)?
Собрал r399 (http://sourceforge.net/p/pythonqt/code/HEAD/tree/) - все нормально.

Сказано, будто надо собирать Python из исходников, если хочется какой-нибудь другой компилятор помимо VS2008/VS2010 (которыми собраны Python 2/3). А я компилирую Qt-программы с помощью MinGW. Но читая эту ветку я понял, что для сборки PythonQt VS не обязателен, можно обойтись MinGW. Или это не так?
Так. Я использую статическую компоновку с библиотекой импорта. Не помню, входит ли она в дистрибутив python 2.7, но ее можно самому сделать:
Цитировать
C:\windows\system32>cd C:\Python27\libs
C:\Python27\libs>pexports C:\Windows\SysWOW64\python27.dll >python27.def
C:\Python27\libs>dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a
Pexports можно взять отсюда: http://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/pexports-0.46/
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Pavel
Гость
« Ответ #18 : Июнь 09, 2015, 10:33 »

Не помню, входит ли она в дистрибутив python 2.7, но ее можно самому сделать
В папке Python/libs файл libpython27.a имеется. Получается, даже pexports не нужен? Замечательно.

А можно ли прикрутить PythonQt к portable Питону, типа WinPython? По идее, сложностей здесь не должно возникнуть, но мало ли...
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #19 : Июнь 09, 2015, 11:00 »

А можно ли прикрутить PythonQt к portable Питону, типа WinPython? По идее, сложностей здесь не должно возникнуть, но мало ли...
А зачем? Вы будете использовать PythonQt в своей программе, которую так или иначе устанавливаете на машину. От питона требуется только python27.dll и те библиотеки py, которые вам требуются для функций, что использовали в своей программе. Так что сам интерпретатор не нужен.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Pavel
Гость
« Ответ #20 : Июнь 10, 2015, 15:13 »

А зачем?
Просто в этих сборках уже установлено всё, что нужно. Но вы правы, ведь библиотеки можно и отдельно от дистрибутива Питона распространять.

Собрал PythonQt (Qt5.4.1, Python 2.7.7, MinGW 4.9.1, WinXP32bit). Сначала пробовал установить в отдельную папку (поскольку так по умолчанию делает QtCreator), но не взлетело (ожидаемо).
Почему-то не удалось прописать INCLUDEPATH и LIBS в python.prf через переменные PYTHON_PATH и PYTHON_LIB (появлялась ошибка, что не может найти Python.h).
Пришлось их захардкодить и вместо:
win32:INCLUDEPATH += $$(PYTHON_PATH)/include
стало
INCLUDEPATH += D:/Python/include

Поскольку проект оказался замусорен промежуточными файлами компиляции, нажал Clean All. В итоге удалился libpythonqt.a (в папке PythonQt/lib), остались только dll. Пришлось собирать заново.
И ещё - можно не только tests выкинуть из проекта, но и generator (если уже есть generated_cpp_xx, где xx - версия Qt).
Ну а в целом - всё работает (наконец-то избавлюсь от PyInstaller). Странно, конечно, что автор предлагает собирать Питон из исходников, если хочется компилятор не от Microsoft.
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #21 : Июнь 10, 2015, 17:18 »

Странно, конечно, что автор предлагает собирать Питон из исходников, если хочется компилятор не от Microsoft.
Ничего странного, иначе получаем смешение рантаймов.
Просто надо иметь ввиду что под win распространяется Python собранный msvc2008.
Используете другой компилер (от мелкомягких или мингв) - неообходим и Python собранный тем же компилером.

Я вот, например использую msvc2010 и вот это:
http://p-nand-q.com/python/2015.05.10-Python279-x32.7z
Записан
Pavel
Гость
« Ответ #22 : Июнь 10, 2015, 23:22 »

Просто надо иметь ввиду что под win распространяется Python собранный msvc2008.
Используете другой компилер (от мелкомягких или мингв) - неообходим и Python собранный тем же компилером.
Да, у меня Python, собранный в VS2008, отсюда и мои первоначальные сомнения. Но PythonQt я компилировал с помощью MinGW и всё отлично заработало. Собирать Python из исходников при этом не потребовалось. У sergek, как я понял, аналогичная ситуация.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #23 : Июнь 11, 2015, 11:59 »

Почему-то не удалось прописать INCLUDEPATH и LIBS в python.prf через переменные PYTHON_PATH и PYTHON_LIB (появлялась ошибка, что не может найти Python.h).
Пришлось их захардкодить и вместо:
win32:INCLUDEPATH += $$(PYTHON_PATH)/include
стало
INCLUDEPATH += D:/Python/include
А у вас в переменных окружения они есть? Если есть, то в командной строке qmake, make должно сработать.
При сборке в Creator я сам прописываю пути в явном виде (http://www.prog.org.ru/index.php?topic=17773.msg119707#msg119707, устаревшие рекомендации).
Если вам не нужны PythonQt_QtAll, тесты, генератор - какие проблемы, собирайте только src.pro.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #24 : Июнь 11, 2015, 12:26 »

Просто надо иметь ввиду что под win распространяется Python собранный msvc2008.
Используете другой компилер (от мелкомягких или мингв) - неообходим и Python собранный тем же компилером.
Да, у меня Python, собранный в VS2008, отсюда и мои первоначальные сомнения. Но PythonQt я компилировал с помощью MinGW и всё отлично заработало. Собирать Python из исходников при этом не потребовалось. У sergek, как я понял, аналогичная ситуация.
Вот он какой мингв всемогущий ))
Значит автор (и я отчасти) не прав: если используется компилятор от microsoft отличный от msvc2008, необходима сборка Python-а соотв. компилятором.
Записан
Pavel
Гость
« Ответ #25 : Июнь 11, 2015, 12:49 »

А у вас в переменных окружения они есть? Если есть, то в командной строке qmake, make должно сработать.
При сборке в Creator я сам прописываю пути в явном виде.
Я собираю из Creator'а, никаких дополнительных переменных не прописывал.
Возможно, там нужен один $, а не $$. Или скобочки надо убрать. Наверное, при следующей сборке опробую варианты (для Qt 5.5).

А можно ли PythonQt запустить в отдельном потоке?
И можно ли как-нибудь приделать code-autocompletion для редактирования скриптов Питона в Qt приложении?
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #26 : Июнь 11, 2015, 13:28 »

А можно ли PythonQt запустить в отдельном потоке?
Што Шокированный

И можно ли как-нибудь приделать code-autocompletion для редактирования скриптов Питона в Qt приложении?
Можно прикрутить rope или jedi... а в результате разработать собственную IDE (ага, еще одну)
Сам так вляпался ))
Записан
Pavel
Гость
« Ответ #27 : Июнь 11, 2015, 13:46 »

Што Шокированный
Когда запускаешь длинный скрипт, то PythonQt, будучу запущенным в основном потоке (где крутится GUI), подвешивает программу, пока скрипт не выполнится.
Понятно, что из другого потока не получится легко управлять GUI-элементами, но у меня в скрипте вообще нет обращений к Qt/C++-объектам.
По идее, нет никаких препятствий для того, чтобы запустить выполнение скрипта в отдельном потоке. Вот и интересно, насколько это легко.

Цитировать
Можно прикрутить rope или jedi... а в результате разработать собственную IDE (ага, еще одну). Сам так вляпался ))
А если не пытаться создавать свою IDE, то насколько легко прикрутить jedi?
Автор PythonQt писал об этом в последнем релизе: "better support for Pylint and jedi completion library (by e.g. implementing doc strings on slots)" http://sourceforge.net/p/pythonqt/news/2015/02/pythonqt-30-released/
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #28 : Июнь 11, 2015, 14:13 »

Што Шокированный
Когда запускаешь длинный скрипт, то PythonQt, будучу запущенным в основном потоке (где крутится GUI), подвешивает программу, пока скрипт не выполнится.
Понятно, что из другого потока не получится легко управлять GUI-элементами, но у меня в скрипте вообще нет обращений к Qt/C++-объектам.
По идее, нет никаких препятствий для того, чтобы запустить выполнение скрипта в отдельном потоке. Вот и интересно, насколько это легко.

Цитировать
Можно прикрутить rope или jedi... а в результате разработать собственную IDE (ага, еще одну). Сам так вляпался ))
А если не пытаться создавать свою IDE, то насколько легко прикрутить jedi?
Автор PythonQt писал об этом в последнем релизе: "better support for Pylint and jedi completion library (by e.g. implementing doc strings on slots)" http://sourceforge.net/p/pythonqt/news/2015/02/pythonqt-30-released/
Про потоки: в принципе, я запускал скрипт выполняющий плюсовый код в отдельном потоке. Наверно, можно пойти дальше и из скрипта выполнить плюсовый код в отдельном потоке, который в свою очередь запустит на выполнение трудоемкий скрипт... но не уверен что сработает... нужно экспериментировать.
Про jedi: думается, что автор PythonQt имел ввиду автокомплит в питоновской консоли (PythonQtScriptingConsole).
Записан
Pavel
Гость
« Ответ #29 : Июнь 11, 2015, 14:52 »

Про jedi: думается, что автор PythonQt имел ввиду автокомплит в питоновской консоли (PythonQtScriptingConsole).
Вряд ли бы тогда была использована фраза better support - это подразумевает, что поддержка автокомплита была и ранее, но что-то было улучшено на уровне библиотеки.
Спасибо за наводку, кстати. PythonQtScriptingConsole класс весьма простой и его можно взять за основу для редактора скриптов. Половину там можно смело выкинуть и будет то, что нужно.
Автокомплит там достигается вызовом следующей строчки:
Код:
PythonQt::self()->introspection(_context, lookup, PythonQt::Anything);
Потом результат выполнения этой функции загружается в QCompleter (класс Qt) - и готово.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 22.