如何在 PyQt5 中连接 QFileSystemModel dataChanged 信号?
How to connect the QFileSystemModel dataChanged signal in 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 中连接这个信号?
如果没有任何重载,则无需显式 select 信号。所以正确的信号连接方式是这样的:
self.model.dataChanged.connect(self.dataChanged)
但无论如何,当你做需要select签名时,你必须传入类型对象或代表类型的字符串。在您的特定情况下,必须使用字符串 ,因为第三个参数没有对应的类型对象。因此,上述信号连接的显式版本为:
self.model.dataChanged[QtCore.QModelIndex, QtCore.QModelIndex, "QVector<int>"].connect(self.dataChanged)
我正在尝试连接 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 中连接这个信号?
如果没有任何重载,则无需显式 select 信号。所以正确的信号连接方式是这样的:
self.model.dataChanged.connect(self.dataChanged)
但无论如何,当你做需要select签名时,你必须传入类型对象或代表类型的字符串。在您的特定情况下,必须使用字符串 ,因为第三个参数没有对应的类型对象。因此,上述信号连接的显式版本为:
self.model.dataChanged[QtCore.QModelIndex, QtCore.QModelIndex, "QVector<int>"].connect(self.dataChanged)