关于PyQt5中QListWidget动态删除Item中的问题
程序员文章站
2022-05-22 19:21:09
...
在前段时间里,做了一个简单的项目,就是一个音乐下载器的客户端程序。功能比较简单,一个单一的界面,主要展示下载的音乐的一些基本信息;后台通过创建一个WebSocket,监听Web端发来的请求。在Web端可以做到添加任务,删除任务等功能。整个项目用Python实现,窗体部分,则用的是PyQt5。具体实现如下。
下载音乐的任务列表,采用的是QListWidget控件,每一个元素用的是自定义的Item。在删除的任务的时候,任务信息确实已经删除了,但是该位置的Item并没有消失,而是变成透明的了。此时,删除QListWidget元素的方法,我用的是removeItemWidget。具体实现如下。
def on_task_deleted(self,id):
if self.ui.list_musics.count() > 0:
for index in range(self.ui.list_musics.count()):
item = self.ui.list_musics.item(index)
widget = self.ui.list_musics.itemWidget(item)
if widget.get_fileid() == id:
self.ui.list_musics.removeItemWidget(item)
del item
del widget
break
这段代码在QT Creator中,用C++代码测试,并没有任何问题。但是用Python实现时,则会出现上述的问题。后来在网上苦苦搜索,才知道在Python中,需要用另外一种方式来删除元素,即通过takeItem方法来取出该元素。代码如下。
def on_task_deleted(self,id):
if self.ui.list_musics.count() > 0:
for index in range(self.ui.list_musics.count()):
item = self.ui.list_musics.item(index)
widget = self.ui.list_musics.itemWidget(item)
if widget.get_fileid() == id:
self.ui.list_musics.takeItem(index)
del item
break
print('task deleted')
经过验证,这种方式在C++和Python中都是可行的。
个人觉得QT还是挺强大的,不过还需要多注意一些细节才行,否则还会遇到不少的坑呢!
上一篇: 记录自己的QT学习之路(9)
下一篇: Git基础及常用命令
推荐阅读
-
关于使用JS去除URL中的指定参数问题,js 对url进行某个参数的删除,并返回url
-
关于vue中根据用户权限动态添加路由的问题
-
关于jpa中无法删除onetomany中many问题的解决
-
关于PHP5.2.17版本中不能动态加载php_curl.dll的有关问题
-
pyqt5 中的qlistwidget item 右键菜单
-
关于PyQt5中QListWidget动态删除Item中的问题
-
javascript - 关于iscroll.js滚动容器中动态插入的元素无法滚动的问题,该如何解决?
-
JavaScript中关于for循环删除数组元素内容时出现的问题
-
关于使用JS去除URL中的指定参数问题,js 对url进行某个参数的删除,并返回url
-
关于vue中根据用户权限动态添加路由的问题