Найти - Пользователи
Полная версия: Проблема с addToJavaScriptWindowObject (PyQT4)
Начало » Python для новичков » Проблема с addToJavaScriptWindowObject (PyQT4)
1
qrasik
Возникла проблема с методом 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 вполне себе запускается.

Помогите разобраться с этой злобной непоняткой.
reclosedev
Нужно указать Qt, что данный метод является слотом, добавить декоратор:
@pyqtSlot()
 def one(self):
        print('123')
qrasik
reclosedev
Нужно указать Qt, что данный метод является слотом, добавить декоратор:
Спасибо большое, все заработало.

Я так понимаю, это из-за разной типизации в Python и C++. При передаче параметра пришлось писать: @pyqtSlot(str).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB