【问题标题】:How to emit dataChanged in PyQt5如何在 PyQt5 中发出 dataChanged
【发布时间】:2016-11-05 17:44:02
【问题描述】:

下面的代码在 self.emit 行中断。它在 PyQt4 中运行良好。如何修复此代码以使其在 PyQt5 中工作?

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QObject, pyqtSignal

class ItemDelegate(QtWidgets.QItemDelegate):
    def __init__(self, parent):
        QtWidgets.QItemDelegate.__init__(self, parent)

    def createEditor(self, parent, option, index):
        return QtWidgets.QLineEdit()

    @QtCore.pyqtSlot()
    def setModelData(self, editor, model, index): 
        self.emit(QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)  

稍后编辑:

一个可行的解决方案:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QObject, pyqtSignal

class Communicate(QObject):
    data_changed = pyqtSignal(QtCore.QModelIndex, QtCore.QModelIndex)

class ItemDelegate(QtWidgets.QItemDelegate):
    def __init__(self, parent):
        QtWidgets.QItemDelegate.__init__(self, parent)
        self.c = Communicate()

    @QtCore.pyqtSlot()
    def setModelData(self, editor, model, index):
        self.c.data_changed.emit(index, index)

【问题讨论】:

  • pyqtSlot 装饰器也应该被赋予类型参数以反映setModelData 的参数。 PyQt5 的旧版本无论如何都会建立连接,但 PyQt 5.6 now enforces this.

标签: python qt pyqt pyqt5


【解决方案1】:

这在 PyQt5 中变得更加简单:

self.dataChanged.emit(index, index, [QtCore.Qt.EditRole])

【讨论】:

    【解决方案2】:

    As you can read hereQtCore.SIGNALPyQt4 之后已停产,因此不兼容。

    This page 解释了PyQt5 的新型信号和插槽。语法是:

    PyQt5.QtCore.pyqtSignal(types[, name[, revision=0[, arguments=[]]]])
    

    您的案例可以翻译成:

    from PyQt5 import pyqtsignal
    
    data_changed = pyqtsignal(QModelindex,QModelIndex)
    

    并发出你的信号:

    self.data_changed.emit(index, index)
    

    编辑:解决方案改编自下面的 cmets。

    【讨论】:

    • data_changed = pyqtSignal(index, index, name="dataChanged(QModelindex,QModelIndex)")上获得TypeError: string or ASCII unicode expected not 'QModelIndex'
    • pyqtSignal 构造函数的类型参数应该是数据类型,而不是单个实例,即。 data_changed = pyqtSignal(QModelIndex, QModelIndex)index 应该在信号发出时传递 self.data_changed.emit(index, index)
    • user3419537:糟糕,我将相应地编辑解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2015-11-05
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多