2016-07-04 6 views
4

以下のコードは、self.emit行で壊れています。 PyQt4ではうまく動作します。このコードを修正してPyQt5で動作させるには?PyQt5でdataChangedを発行する方法

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) 
+0

'pyqtSlot'デコレータには、' setModelData'への引数を反映させる型引数も与えられます。 PyQt5の古いバージョンは関係なく接続を行いますが、PyQt 5.6はこれを強制します(http://pyqt.sourceforge.net/Docs/PyQt5/incompatibilities.html#pyqt-v5-6)。 – user3419537

答えて

1

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) 

編集:以下のコメントから適応策を。

+0

'TypeErrorの取得:' data_changed = pyqtSignal(index、index、name = "dataChanged(QModelindex、QModelIndex)")の 'QModelIndex 'でない文字列またはASCIIユニコードの取得' – alphanumeric

+0

'pyqtSignal'コンストラクタへの型引数は、個々のインスタンスではなく、タイプです。 'data_changed = pyqtSignal(QModelIndex、QModelIndex)'です。 'self.data_changed.emit(index、index)' – user3419537

+0

user3419537:それに応じて解決します。 – Ian

関連する問題