我正试图在pyqt5中为我的listwidget进行拖放(带图像或文件)。我可以在pyqt4中找到很多例子,但是有一部分在新版本中不起作用:
在“dropevent”中:
self.emit(QtCore.SIGNAL("dropped"), links)
并在MainForm中:
self.connect(self.view, QtCore.SIGNAL("dropped"), self.pictureDropped)
我阅读了很多帖子,但似乎无法找到答案如何用pyqt5写下来。有人可以帮帮我吗?
答案 0 :(得分:1)
简单。
这里我们举一个小例子:
self.signalOwner.mySignal.connect(self.slotFunction)
在你的例子中,让我们说并考虑视图拥有信号,而pictureDropped是你的插槽功能,所以:
self.view.dropped.connect(self.pictureDropped)
请记住,您的信号必须发出某些类型或者根本不发送任何类型,并且您的@pyqtSlot函数必须接收相同类型的函数,并且该函数接收与您的信号发出相同数量的参数。
我在不久前发了一篇关于图像拖放的文章,很难弄清楚如何接受事件以及类如何表现,它比仅仅信号更深刻,如果您需要,请 POST:D
答案 1 :(得分:1)
您的关联示例使用old-style signal and slot syntax,而您需要使用new-style syntax。在PyQt4(版本4.5或更高版本)中,您可以使用任一样式,但PyQt5仅支持新样式。
旧式语法允许自动发出自定义信号,但新式语法要求事先在类上声明信号:
class ListWidget(QtWidgets.QListWidget):
dropped = QtCore.pyqtSignal(list)
def __init__(self, parent=None):
...
def dropEvent(self, event):
...
self.dropped.emit(list_of_files)
然后进行信号连接:
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
...
self.listWidget = ListWidget()
self.listWidget.dropped.connect(self.handleDropped)
def handleDropped(self, list_of_files):
print('dropped:', list_of_files)