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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPluginLoader через Питон (PyQT)  (Прочитано 4579 раз)
Mixolap
Гость
« : Май 20, 2007, 20:14 »

Есть dll, написанный на C++ (QT), программа написанная на С++ его нормально подгружает и удачно использует объект в нем => плагин нормально работает (взят из примера plugandpaint :wink: ).
Подключаю его через pyQT кодом:

import sys
from PyQt4 import QtGui,QtCore

if __name__ == "__main__":
    a = QtGui.QApplication(sys.argv)
   
    plugin = QtCore.QPluginLoader("libpnp_extrafilters.so")
    if plugin.load():
        obj = plugin.instance()
        if obj != None:
            obj.filters()
    sys.exit(0)

и получаю такую вот ошибку:
Traceback (most recent call last):
  File "myplug.py", line 12, in ?
    obj.filters()
AttributeError: filters

Чего я в коде не дописал? Может как-то надо подключить заголовочный файл интерфейса плагина (тогда как)?
или может кто подскажет другие способы использования класса, написанного на  C++ (QT), без его модификации в питоне?
Записан
Mixolap
Гость
« Ответ #1 : Май 21, 2007, 18:07 »

После добавления строки:
 print obj, type(obj), dir(obj)
появилось следующее:
<PyQt4.QtCore.QObject object at 0xb7ecfe2c> <class 'PyQt4.QtCore.QObject'> ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'blockSignals', 'childEvent', 'children', 'connect', 'connectNotify', 'customEvent', 'deleteLater', 'disconnect', 'disconnectNotify', 'dumpObjectInfo', 'dumpObjectTree', 'dynamicPropertyNames', 'emit', 'event', 'eventFilter', 'findChild', 'findChildren', 'inherits', 'installEventFilter', 'isWidgetType', 'killTimer', 'metaObject', 'moveToThread', 'objectName', 'parent', 'property', 'receivers', 'removeEventFilter', 'sender', 'setObjectName', 'setParent', 'setProperty', 'signalsBlocked', 'startTimer', 'thread', 'timerEvent', 'tr', 'trUtf8']
Traceback (most recent call last):
  File "myplug.py", line 14, in ?
    obj.filters()
AttributeError: filters

то есть obj считается классом QObject (что в принципе верно, так как экспортируемый класс наследуется от QObject)
как теперь дать знать питону о том что это класс: ExtraFilterPlugin?
Записан
Tonal
Гость
« Ответ #2 : Май 22, 2007, 08:33 »

Если класс, который реализует плагин не стандартный всяко надо писать обёртку.
А вот как получить по QObject нужный класс - не в курсе.
Ищи в документации к PyQt и sip.
Вот что я наковырял по быстрому: "6.4 Writing QObjectQt Designer Plugins" "bool QObject.inherits (self, str classname)"

P.S. Расскажи если что найдёшь - изрядно интересно. ;-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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