Kia*_*ash 6 python qt pyqt pyqt4
我知道如何使用QDirModel(或QFileSystemModel)创建一个简单的QTreeView()来显示系统中的文件/文件夹,但我想在每个文件/文件夹旁边添加一个复选框,以便用户可以选择一些文件夹/文件他的系统.显然,我还需要知道他选择了哪些.任何提示?
基本上是这样的......

下面是一个示例代码,它使目录视图但没有复选框.
from PyQt4 import QtGui
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
model = QtGui.QDirModel()
tree = QtGui.QTreeView()
tree.setModel(model)
tree.setAnimated(False)
tree.setIndentation(20)
tree.setSortingEnabled(True)
tree.setWindowTitle("Dir View")
tree.resize(640, 480)
tree.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
您可以子类化QDirModel和重新实现data(index,role)方法,您应该在哪里检查,如果role 是QtCore.Qt.CheckStateRole.如果是,你应该返回QtCore.Qt.Checked或QtCore.Qt.Unchecked.此外,您还需要重新实现setData方法,处理用户检查/取消检查,并flags返回QtCore.Qt.ItemIsUserCheckable标志,该标志允许用户检查/取消选中.即:
class CheckableDirModel(QtGui.QDirModel):
def __init__(self, parent=None):
QtGui.QDirModel.__init__(self, None)
self.checks = {}
def data(self, index, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.CheckStateRole:
return QtGui.QDirModel.data(self, index, role)
else:
if index.column() == 0:
return self.checkState(index)
def flags(self, index):
return QtGui.QDirModel.flags(self, index) | QtCore.Qt.ItemIsUserCheckable
def checkState(self, index):
if index in self.checks:
return self.checks[index]
else:
return QtCore.Qt.Unchecked
def setData(self, index, value, role):
if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
self.checks[index] = value
self.emit(QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
return True
return QtGui.QDirModel.setData(self, index, value, role)
Run Code Online (Sandbox Code Playgroud)
然后你使用这个类而不是QDirModel:
model = CheckableDirModel()
tree = QtGui.QTreeView()
tree.setModel(model)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2852 次 |
| 最近记录: |