Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2013 09:20:20

qrasik
Зарегистрирован: 2013-03-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с addToJavaScriptWindowObject (PyQT4)

Возникла проблема с методом addToJavaScriptWindowObject(str, obj). Как говорится в документации, первый параметр это имя которое будет доступно в JS, а второй параметр это собственно код Python-а который будет вызываться из JS.

Так вот, второй параметр должен быть QObject-ом и тут то у меня возникли проблемы, так как не очень понятно, что именно имели в виду в мануале. (да и мануал, по сути, для C++ писан был, а не для Python3)

Пример:

# -*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
# для примера
class test(QObject):
    def __init__(self):
        QObject.__init__(self)
    def one(self):
        print('123') 
app = QApplication([])
web = QWebView()
web.page().mainFrame().addToJavaScriptWindowObject('test', test()) # QObject
web.load(QUrl('http://localhost/'))
web.show()
app.exec_()

Одним словом, мои потуги не увенчались успехом. А вот если вместо test() передать web, то метод web.close() из JS вполне себе запускается.

Помогите разобраться с этой злобной непоняткой.

Отредактировано qrasik (Март 22, 2013 11:57:22)

Офлайн

#2 Март 22, 2013 19:13:24

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Проблема с addToJavaScriptWindowObject (PyQT4)

Нужно указать Qt, что данный метод является слотом, добавить декоратор:

@pyqtSlot()
 def one(self):
        print('123')

Офлайн

#3 Март 23, 2013 11:57:07

qrasik
Зарегистрирован: 2013-03-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с addToJavaScriptWindowObject (PyQT4)

reclosedev
Нужно указать Qt, что данный метод является слотом, добавить декоратор:
Спасибо большое, все заработало.

Я так понимаю, это из-за разной типизации в Python и C++. При передаче параметра пришлось писать: @pyqtSlot(str).

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version