20. [Python GUI] PyQt5中的模型与视图框架-实现一个简单的文件浏览器的例子

PyQt5中的模型与视图框架-实现一个简单的文件浏览器的例子

一、使用模型/视图实现一个简单的文件浏览器

这个例子里不涉及数据的更新,只是简单的将模型和视图结合起来,通过这个例子我们能简单了解模型和视图的工作原理,形成一个初步的印象。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTreeView, QListView, QTableView, QSplitter, QFileSystemModel, QDirModel
from PyQt5.QtCore import QDir, QModelIndex


if __name__ == '__main__':
  app = QApplication(sys.argv)
  
  # 在新版的C++ Qt里,QDirModel已经被废弃了,可以改为使用QFileSystemModel, PyQt5里目前还能用QDirModel
  model = QDirModel()
  #model = QFileSystemModel()
  #model.setRootPath(QDir.currentPath())
  
  # 创建三个视图
  tree_view = QTreeView()
  list_view = QListView()
  table_view = QTableView()
  
  # 为视图设置数据模型
  tree_view.setModel(model)
  list_view.setModel(model)
  table_view.setModel(model)
  
  # 将list_view和table_view的选择模型设置为何tree_view相同
  list_view.setSelectionModel(tree_view.selectionModel())
  table_view.setSelectionModel(tree_view.selectionModel())
  
  # 设置信号和槽, 以便使list view 和table view能够随tree view中的点击而变化
  # 当双击tree_view对象中的某个目录时,list_view和table_view对象中也同步显示此选定目录下的所有文件和目录
  tree_view.doubleClicked.connect(list_view.setRootIndex)
  tree_view.doubleClicked.connect(table_view.setRootIndex)
  
  # 将三个视图添加到分裂器中
  splitter = QSplitter()
  splitter.addWidget(tree_view)
  splitter.addWidget(list_view)
  splitter.addWidget(table_view)
  
  # 设置窗口的title
  splitter.setWindowTitle('Model/View example')
  splitter.show()

  sys.exit(app.exec_())

运行效果如下:

20221122231946

二、小手一抖,点个赞再走哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值