2016-08-04 4 views
1

Я пытаюсь подключить сигнал QFileSystemModel.dataChanged, но пока не повезло. Код ниже нерест этой ошибки:Как подключить сигнал QFileSystemModel dataChanged в 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() 

Как я могу подключить этот сигнал в PyQt5?

ответ

1

Вам не нужно явно выбирать сигнал, если у него нет перегрузок. Таким образом, правильный способ подключения сигнала, как это:

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

Но в любом случае, когда вы сделать нужно выбрать подпись, вы должны передать либо объекты типа или строки, которые представляют собой тип. В вашем конкретном случае используется строка , которая должна использоваться, поскольку третий параметр не имеет соответствующего объекта типа. Таким образом, явная версия вышеупомянутого сигнального соединения будет:

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

Спасибо! Это прекрасный ответ, я вообще не понимал порочную ошибку. – BPL

Смежные вопросы