PyQt5 treewidget的一些使用心得

问题一:获取当前选中的item的层级关系

想要实现获取当前item的结构内容,类似于:

新建目录1_新建目录2_新建目录3_新建文件1

在这里插入图片描述

实现方法

可利用循环item.parent以及数组操作reverse翻转数据实现

path = []
while item:
    path.append(item.text(0))
    item = item.parent()
path.reverse()
item_path = '_'.join(path)

问题二:区分层级类型

例如最后一层item为文件层,支持双击或单击显示其内容,而路径层不进行该操作。

实现方法

在新建item时,添加flag标志位,例如路径层添加flag为False,文件层为True

# 路径层
newItem.setText(0, f'新建目录{self.number1}')
flag = 'False'
newItem.setData(0, Qt.UserRole, flag)
# 文件层
newItem.setText(0, fileName)
flag = 'True'
newItem.setData(0, Qt.UserRole, flag)

这样就可以通过判断当前选中的item类型进行区分操作。

if item.data(0, Qt.UserRole) == 'True':

问题三:在treewidget区域右击出现菜单

实现该功能,需要关联预设好的事件。
在这里插入图片描述

实现方法

关联信号与槽

self.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
self.treeWidget.customContextMenuRequested.connect(self.showContextMenu)

其中self.showContextMenu是菜单函数,通过QMenu()新建菜单。

menu = QMenu()
rename_action = QAction('重命名', self)
saveAction = QAction('保存', self)
delAction = QAction('删除', self)
rename_action.triggered.connect(lambda: self.renameTreeItem(self.item))
saveAction.triggered.connect(lambda: self.UPDATEToDB(self.item))
delAction.triggered.connect(lambda: self.deletename(self.item))

menu.addAction(rename_action)
menu.addAction(saveAction)
menu.addAction(delAction)

# 显示菜单
menu.exec_(self.treeWidget.viewport().mapToGlobal(position))

问题四:判断右击位置是item,还是根目录下

不同位置,菜单内容设置不同内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现方法

self.item = self.treeWidget.itemAt(position)
if self.item:
	# 右击位置为item
else:
	# 右击位置为根目录

更多内容持续关注
如果急于求成,咸鱼未来视觉科技与你不见不散。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未来视觉科技

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

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

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

打赏作者

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

抵扣说明:

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

余额充值