这只是我脚本的一部分。当file.txt中的数据发生变化时,我无法重新加载我的脚本(不会停止它)。
class StockListModel(QtCore.QAbstractListModel):
def __init__(self, stockdata = [], parent = None):
QtCore.QAbstractListModel.__init__(self, parent)
self.stockdata = stockdata
self.file_check = QtCore.QFileSystemWatcher(['/home/user/Desktop/file.txt'])
self.file_check.fileChanged.connect(self.resetItems)
def getItems(self):
return stockdata
@QtCore.pyqtSlot(str)
def resetItems(self, path):
self.beginResetModel()
self.stockdata = self.stockdata #without this and next line I have the same
self.endResetModel() #error
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
app.setStyle("plastique")
tableView = QtGui.QTableView()
tableView.show()
a = os.popen("cat /home/user/Desktop/file.txt")
a = a.read()
time_variable = QtCore.QString("%s"%a)
model = StockListModel([time_variable])
tableView.setModel(model)
sys.exit(app.exec_())
当我运行此脚本并更新文件时出现错误: AttributeError:' QString' object没有属性" beginResetModel'
我应该更改什么来刷新数据?
答案 0 :(得分:1)
您收到错误的原因是fileChanged
emits a string的QFileSystemWatcher
信号,resetItems()
正在收到该信号,该信号期待StockListModel
的实例}。 self
引用未被传递,因为file_check
已被定义为静态且未绑定到特定实例。
尝试将file_check
作为实例变量移动到构造函数中,并修改resetItems()
以接受fileChanged
发出的字符串参数。
编辑:为了清晰起见添加了代码
构造
def __init__(self, stockdata = [], parent = None):
QtCore.QAbstractListModel.__init__(self, parent)
self.stockdata = stockdata
self.file_check = QtCore.QFileSystemWatcher(['/home/user/Desktop/file.txt'])
self.file_check.fileChanged.connect(self.resetItems)
resetItems:
@QtCore.pyqtSlot(str)
def resetItems(self, path):
self.beginResetModel()
...