Ошибка подключения пользовательского сигнала к пользовательскому слоту с виджетом QWebEngineView - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть маленький GUI, который отображает фигуру, используя график с виджетом QWebEngineView. Я хочу, чтобы виджет принимал капли и вызывал пользовательский сигнал, подключенный к пользовательскому слоту Дроп-часть работает, но я получаю сообщение об ошибке при подключении сигнала к слоту, и я не нашел подсказок, чтобы понять, что не так и, возможно, как это исправить. Чтобы реализовать механизм отбрасывания, я определил пользовательский класс QWebEngineView, вот определение:

from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QDataStream, QIODevice, QMimeData, Qt, pyqtSignal

class itemDropWebEngineView(QWebEngineView):
    dropSignal = pyqtSignal()

    def __init__(self, parent=None):
        super(itemDropWebEngineView, self).__init__(parent)
        self.setAcceptDrops(True)
        self.column_name = None

    def dragEnterEvent(self, event):
        if event.mimeData().hasFormat("application/x-icon-and-text"):
            event.accept()
        else:
            event.ignore()

    def dragMoveEvent(self, event):
        if event.mimeData().hasFormat("application/x-icon-and-text"):
            event.setDropAction(Qt.CopyAction)
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasFormat("application/x-icon-and-text"):
            data = event.mimeData().data("application/x-icon-and-text")
            stream = QDataStream(data, QIODevice.ReadOnly)
            text = stream.readQString()
            self.column_name = text
            event.setDropAction(Qt.CopyAction)
            event.accept()
        else:
            event.ignore()

Вот соответствующий код из файла пользовательского интерфейса:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot
from droplineedit import DropLineEdit
from dndlistwidget import DnDListWidget
from item_drop_webengineview import itemDropWebEngineView


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        .
        .
        .
        self.widget_display = itemDropWebEngineView(self.centralwidget)
        self.widget_display.setSizePolicy(sizePolicy)
        self.widget_display.setObjectName("widget_display")
        .
        .
        .
        self.retranslateUi(MainWindow)
        self.widget_display.dropSignal.connect(self.dropSignalSlot)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.lineEdit_x.setPlaceholderText(_translate("MainWindow", "X-Axis"))
        self.lineEdit_y.setPlaceholderText(_translate("MainWindow", "Y-Axis"))
        self.menuFile.setTitle(_translate("MainWindow", "&File"))
        self.actionData.setText(_translate("MainWindow", "Data"))


    @pyqtSlot()
    def dropSignalSlot(self):
        """ Will be defined in main, pass for now..."""
        pass

Когда я запускаю код, Я получаю следующую ошибку:

QObject::connect: Cannot connect itemDropWebEngineView::dropSignal() to (null)::dropSignalSlot()
Traceback (most recent call last):
.
.
.
TypeError: connect() failed between itemDropWebEngineView.dropSignal[] and dropSignalSlot()

Я сделал что-то подобное в виджете QTableView. Я помещаю CSV-файл на виджет для загрузки данных, и он работает нормально. Как я могу заставить это работать с виджетом QWebEngineView?

Заранее спасибо !!

...