2016-08-04 4 views
1

Ich versuche, das Signal zu verbinden, aber bisher ohne Glück. Der folgende Code wird Laichen diesen Fehler:Wie verbinde ich das QFileSystemModel dataChanged Signal in PyQt5?

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() 

Wie kann ich dieses Signal in PyQt5 verbinden?

Antwort

1

Sie müssen das Signal nicht explizit auswählen, wenn keine Überlastungen vorliegen. Also der richtige Weg, um das Signal zu verbinden ist wie folgt:

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

Aber in jedem Fall, wenn Sie Notwendigkeit tun die Signatur zu wählen, können Sie entweder in Textobjekte oder Zeichenfolgen übergeben müssen, die einen Typ darstellen. In Ihrem speziellen Fall muss eine Zeichenkette verwendet werden, weil der dritte Parameter kein entsprechendes Typobjekt hat. Also die explizite Version der obigen Signalverbindung wäre:

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

Vielen Dank! Das ist eine perfekte Antwort, ich verstand den erzeugten Fehler überhaupt nicht. – BPL

Verwandte Themen