祝大家日安!
我已经写了很多年的代码,但是当涉及到PyQt时还是有点生疏,所以请原谅我在语法上缺乏问题;-)
我正在破解一个派生的(有名的?)PyQt4 (和Qt)附带的打包示例,即PyQt4中"../examples/itemviews“中的"basicsortfiltermodel.pyw”...
我已经添加了一个小的弹出式菜单(让我们称之为B.py),用户可以从BasicSort派生(让我们称之为A.py)启动它。
我相信我正在更正将新数据(新记录)添加到QSortFilterProxyModel()。(我之所以这么想,是因为经过一些努力,我现在没有收到任何错误),但是我似乎无法刷新QTreeView。我已经搜索了Qt类文档,并用Google把它搜索出来(从它的外观上看,这似乎是一个常见的问题,哈哈)。
现在我知道这是一个丑陋的技巧,但只是想让它正常工作(我的理论是优雅可以稍后出现)……在A.py的底部,我声明了一个全局"wX",
global wX;
[...]
window = Window()
wX = Window()
window.setSourceModel(createMailModel(window))这样,当我稍后点击一个按钮时,我可以更容易地获得在运行时"createMailModel“中找到的"parent”值。从中我得到了"model“句柄..
model = QtGui.QStandardItemModel(0, 17, WinX)
addMail(model, "image",
"tabl00",
etc
etc)不管怎样,..I认为这是有效的..。但是在通过addMail()添加了一个新记录之后,我似乎无法让self.proxyModel刷新它自己。
我很确定这是一个愚蠢的新手问题,lol....but,有人能帮我解释一下如何让它工作吗?
非常感谢,
发布于 2010-11-20 23:23:42
我相信你必须在你的原始模型中添加新的项目,而不是代理模型。一旦添加了项目,代理模型和视图将相应地更新自身。看看下面的例子是否适合你:
import sys
from PyQt4 import QtGui
class MainForm(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainForm, self).__init__(parent)
self.setMinimumSize(300, 400)
self.model = QtGui.QStandardItemModel()
self.sortModel = QtGui.QSortFilterProxyModel()
self.sortModel.setSourceModel(self.model)
parentItem = self.model.invisibleRootItem()
parentItem.appendRow(QtGui.QStandardItem("3"))
parentItem.appendRow(QtGui.QStandardItem("1"))
parentItem.appendRow(QtGui.QStandardItem("4"))
parentItem.appendRow(QtGui.QStandardItem("2"))
self.view = QtGui.QListView(self)
self.view.setModel(self.sortModel)
self.view.setGeometry(0, 0, 200, 400)
self.button = QtGui.QPushButton("add items", self)
self.button.move(200, 0)
self.button.clicked.connect(self.on_button_clicked)
self.layout = QtGui.QVBoxLayout(self.centralWidget())
self.layout.addWidget(self.view)
self.layout.addWidget(self.button)
self.sortModel.sort(0)
def on_button_clicked(self):
parentItem = self.model.invisibleRootItem()
parentItem.appendRow(QtGui.QStandardItem("222"))
parentItem.appendRow(QtGui.QStandardItem("333"))
parentItem.appendRow(QtGui.QStandardItem("444"))
def main():
app = QtGui.QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()
if __name__ == '__main__':
main()希望这能有所帮助,致敬
https://stackoverflow.com/questions/4218778
复制相似问题