【问题标题】:Drag and drop with pyqt5 (SIGNAL)使用 pyqt5 (SIGNAL) 拖放
【发布时间】:2017-05-27 09:30:53
【问题描述】:

我正在尝试让拖放(带有图像或文件)在 pyqt5 中为我的列表小部件工作。用pyqt4可以找到很多例子,但是有一个部分在较新的版本中不起作用:

在“dropevent”中:

self.emit(QtCore.SIGNAL("dropped"), links)

在主窗体中:

self.connect(self.view, QtCore.SIGNAL("dropped"), self.pictureDropped)

我阅读了很多帖子,但似乎找不到答案应该如何用 pyqt5 写下来。谁能帮我解决这个问题?

链接到整个示例: PyQT4: Drag and drop files into QListWidget

【问题讨论】:

    标签: python drag-and-drop pyqt pyqt5 qt-designer


    【解决方案1】:

    简单。

    1. 信号必须先来
    2. 插槽作为参数。
    3. 只有在信号创建后才能连接
    4. 您必须仅在建立连接后发出。

    我们来看一个小例子:

    self.signalOwner.mySignal.connect(self.slotFunction)
    

    在您的示例中,假设视图拥有信号,而 pictureDropped 是您的插槽函数,因此:

    self.view.dropped.connect(self.pictureDropped)
    

    请记住,您的信号必须发出某些类型或根本不发出任何信号,并且您的 @pyqtSlot 函数必须接收与接收信号所发出的相同数量参数的函数相同的类型。

    不久前我发表了一篇关于图像拖放的帖子,很难弄清楚如何接受事件以及类的行为方式,它比仅信号更深一些,所以,如果你需要这里是 POST :D

    【讨论】:

    • 非常感谢您花时间回答我的问题。我要试试这个。也会查看您的帖子,很高兴了解有关信号如何工作的更多信息。
    • 酷先生,我强烈建议你看看这个帖子,我很难弄清楚,没有人回答我,但经过一些深入的研究,我终于做到了,总结了拖放事件的一些不错的概念。即使我问自己并回答了自己,仍然值得一试:D。很高兴知道您正在努力。
    【解决方案2】:

    您的链接示例使用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)
    

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多