gpt4 book ai didi

python - PyQt 开始删除

转载 作者:行者123 更新时间:2023-11-28 16:54:28 26 4
gpt4 key购买 nike

在下面的例子中:

from PyQt4 import QtCore, QtGui

class Ui_Dialog(QtGui.QDialog):

def __init__(self,parent=None):
QtGui.QDialog.__init__(self,parent)
self.setObjectName("Dialog")
self.resize(600, 500)

self.model = QtGui.QDirModel()
self.tree = QtGui.QTreeView()
self.tree.setModel(self.model)
print(self.model.flags(self.model.index("c:\Program Files")))
self.model.setFilter(QtCore.QDir.Dirs|QtCore.QDir.NoDotAndDotDot)

self.tree.setSortingEnabled(True)

self.tree.setRootIndex(self.model.index("c:\Program Files"))

#self.tree.hideColumn(1)
#self.tree.hideColumn(2)
#self.tree.hideColumn(3)
self.tree.setWindowTitle("Dir View")
self.tree.resize(400, 480)
self.tree.setColumnWidth(0,200)

self.tree.show()
QtCore.QObject.connect(self.tree, QtCore.SIGNAL("clicked(QModelIndex)"), self.test)
QtCore.QMetaObject.connectSlotsByName(self)

self.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))

def test(self,index):

print(self.model.filePath(index))

print(self.model.rowCount(index))
#self.model.beginRemoveRows(index.parent(),index.row(),self.model.rowCount(index))
#self.model.endRemoveRows()

print("Row of the index =",index.row())

print("Parent = ",self.model.data(index.parent()))

if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
ui = Ui_Dialog()
#ui.show()
sys.exit(app.exec_())

我想在单击它时删除该行及其子项(如果有)。
(必须删除 click 下的文件夹及其子项。)

我知道我在这一行上犯了错误:

self.model.beginRemoveRows(index.parent(),index.row(),self.model.rowCount(index))

感谢您的宝贵时间。

最佳答案

I know I'm making mistake on this line:

self.model.beginRemoveRows(index.parent(),index.row(),self.model.rowCount(index))

是的,你是对的。让我们看看您传递的内容:

index.parent() - the parent of index
index.row() - the row number of index, the row you want deleted
self.model.rowCount(index) - the number of total children had by index

现在,看看 beginRemoveRows 上文档中的图片:

你告诉它你想从 index.row() 中删除到等于索引中子项数的行。您的亲子索引不匹配。

你真正想要的是:

beginRemoveRows(index.parent(), index.row(), index.row())

如果您删除 index.row() 处的行,它的所有子项都将被自动删除

但是,还有一个更大的问题:beginRemoveRows() 不会 删除任何行。它只是提醒您的模型您将要删除行。当您调用 endRemoveRows() 时,该模型会让任何正在收听的人知道它已更新,以便他们可以正确重绘。

在 C++ 中,不允许调用 beginRemoveRows(),因为它们是 protected 方法,只有模型才能调用。

要按照您的意愿进行过滤,您需要创建一个自定义代理模型(即 QSortFilterProxyModel )来执行您想要的过滤。然后,您将在信号处理程序中操作 QSortFilterProxy 模型作为响应。

关于python - PyQt 开始删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com