【问题标题】:How to connect the QFileSystemModel dataChanged signal in PyQt5?如何在 PyQt5 中连接 QFileSystemModel dataChanged 信号?
【发布时间】:2016-12-11 06:31:19
【问题描述】:

我正在尝试连接QFileSystemModel.dataChanged 信号,但到目前为止还没有成功。下面的代码产生了这个错误:

TypeError:字节或 ASCII 字符串不应为“列表”

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 中连接这个信号?

【问题讨论】:

    标签: python pyqt signals-slots pyqt5 qfilesystemmodel


    【解决方案1】:

    如果没有任何重载,则无需显式选择信号。所以正确的信号连接方式是这样的:

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

    但无论如何,当您确实需要选择签名时,您必须传入类型对象或表示类型的字符串。在您的特定情况下,必须使用字符串 ,因为第三个参数没有相应的类型对​​象。所以上述信号连接的显式版本是:

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

    【讨论】:

    • 谢谢!这是一个完美的答案,我根本不理解产生的错误。
    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2016-11-16
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多