2016-08-04 9 views
1

QFileSystemModel.dataChanged 신호를 연결하려하지만 지금까지 행운이 없습니다.PyQt5에서 QFileSystemModel dataChanged 신호를 연결하는 방법은 무엇입니까?

TypeError: bytes or ASCII string expected not 'list'

import sys 

from PyQt5 import QtGui, QtWidgets, QtCore 
from PyQt5.QtWidgets import QFileSystemModel, QTreeView 
from PyQt5.QtCore import QDir 

class DirectoryTreeWidget(QTreeView): 

    def __init__(self, path=QDir.currentPath(), *args, **kwargs): 
     super(DirectoryTreeWidget, self).__init__(*args, **kwargs) 

     self.model = QFileSystemModel() 
     self.model.dataChanged[QtCore.QModelIndex,QtCore.QModelIndex,[]].connect(self.dataChanged) 

    def dataChanged(self, topLeft, bottomRight, roles): 
     print('dataChanged', topLeft, bottomRight, roles) 


def main(): 
    app = QtWidgets.QApplication(sys.argv) 
    ex = DirectoryTreeWidget() 
    ex.set_extensions(["*.txt"]) 

    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 

어떻게 내가 PyQt5에서이 신호를 연결할 수 있습니다 아래의 코드는이 오류를 산란한다?

답변

1

과부하가없는 신호를 명시 적으로 선택할 필요가 없습니다. 그래서 신호를 연결하는 올바른 방법은 다음과 같이이다 :

self.model.dataChanged.connect(self.dataChanged) 

그러나 어떤 경우에

, 당신은 서명을 선택 필요성을 때, 당신은 유형을 대표하는 두 유형의 객체 나 문자열을 전달해야합니다. 특정 경우에 문자열 이어야합니다. 세 번째 매개 변수에는 해당 유형 개체가 없기 때문입니다. 위의 신호 연결의 명시적인 버전은 다음과 같습니다.

self.model.dataChanged[QtCore.QModelIndex, QtCore.QModelIndex, "QVector<int>"].connect(self.dataChanged) 
+0

감사합니다! 그것은 완벽한 대답입니다. 나는 발생 된 오류를 전혀 이해하지 못했습니다. – BPL