У меня есть маленький 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?
Заранее спасибо !!