PyQt QTreeWidget 双击条目编辑及出现type object ‘ItemFlags‘has no attribute ‘ItemIsEditable‘ 错误的解决方法详解

QTreeWidget 双击编辑当前条目是树形目录的一个常用功能,但是在开发实现这一功能的过程中,走了很多弯路,绕了不少圈子。目前网络上关于实现这一功能的,基本都是基于Qt的实现方法,没有PyQt的案例,对于不熟悉C++ 的开发者,看来看去都觉得过于复杂。

一、参考资料

关于C++实现过程,参见下面的链接:

QTreeWidget支持双击编辑Item节点的内容_itemiseditable-CSDN博客

QT实现双击编辑QTreeWidget节点-高性能服务器开发

CSDN、B站和某园翻了个遍,也没有找到pyqt或者pyside版解决这个问题的。最后没办法去找

网上找了不少资料,看到用下面的语句可以解决:

二、实现过程

item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsEditable)  

但此时,出现条目不能拖动的情况。唉,太难了我。。。

等于实现了一个功能,又废了一个功能。

    最后在油管上找到了一个视频,讲实现方法的(視频资源已上传CSDN,参见https://download.csdn.net/download/qq_58168857/88530963?spm=1001.2014.3001.5503),看了后进行模仿:

item = self.tree.selectedItems()
if item:
   item = item[0] 
   item.setFlags(item.flags() |  Qt.ItemFlags.ItemIsEditable)

但是出现了以下报错:

 item.setFlags(item.flags() |  Qt.ItemFlags.ItemIsEditable)   ditable'

AttributeError: type object 'ItemFlags' has no attribute 'ItemIsEditable'

国内的网站上找了个遍,试了好几种方法,都不行。最后我把注意力集中在item.setFlags(item.flags() |  Qt.ItemFlags.ItemIsEditable)  这个句上。参照C++的代码,它是可以正常执行的,但是不知道为什么在这里不行。

于是检查官方开发说明文件:

并参照【QT】QTableWidgetItem.setFlags()_qt setflags函数-CSDN博客 这篇文章,对应的值改成了2:

item = self.tree.selectedItems()
if item:
   item = item[0] 
   item.setFlags(item.flags() | 2)

系统能够正常运行了。

考虑到用2做参数,实在是不易理解,程序可读性不好,官方文件中C++的语法是

Qt::ItemIsEditable

对应的Python语法是Qt.ItemIsEditable,

item = self.tree.selectedItems()
if item:
   item = item[0] 
   item.setFlags(item.flags() | Qt.ItemIsEditable)

BingGo,问题得到圆满解决。

三、核心代码

核心代码如下:

 # 编辑Item部分信号槽连接
self.tree.itemDoubleClicked.connect(self.edit_Item)  

# 编辑部分槽函数
def edit_Item(self):
        item = self.tree.selectedItems()
        print(item)
        if item:
            item = item[0] 
            item.setFlags(item.flags() |  Qt.ItemIsEditable)   # 使用2或者是ItemIsEditable的值,使用这一条命令,可拖动,可编辑
            #item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsEditable)      # 使用这一条后,条目不能拖动

四、感悟

Qt功能实在强大,功能模块参数太过烦杂,而开发证明基本都是基于C++的,而Qt的语法和Pyqt的语法差别比较大,这就造成在开发过程中,对于没有C++背景的开发者,遇到问题翻阅说明非常困难,所以要想用好pyqt,一些基本的C++语法常识还是要了解一些。

由于在这里卡的时间比较长,所以就不把这一部分写到前面那个QTreeWidget的文章里,单独形成一篇文章,有利于有缘的朋友检索到,从而解决您的困惑。后续我会把自己整理的QtreeWidget使用方法发出来,供大家一起参阅。

您还有什么其他好的方法,或者在开发过程中还没有解决问题,欢迎留言讨论。

您的一键三连是我的最大动力!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃饭的家伙事儿

您的鼓励是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值