2016-08-04 16 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) 

しかし、いずれにせよ、あなたが署名を選択する必要性を行うとき、あなたはタイプを表すタイプのオブジェクトや文字列のいずれかに渡す必要があります。特殊なケースでは、文字列を使用する必要があります。これは、3番目のパラメータに対応する型オブジェクトがないためです。したがって、上記の信号接続の明示的なバージョンは、

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

ありがとうございます!それは完璧な答えです、私は生まれたエラーを全く理解していませんでした。 – BPL

関連する問題