Skip to content

Commit c092046

Browse files
committedNov 4, 2018
删除自定义Item
1 parent badbbac commit c092046

File tree

5 files changed

+109
-84
lines changed

5 files changed

+109
-84
lines changed
 

‎.settings/org.eclipse.core.resources.prefs

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ encoding//\u5176\u5B83/\u81EA\u5B9A\u4E49import/src/test.py=utf-8
2424
encoding//\u5176\u5B83/\u81EA\u5B9A\u4E49\u5C5E\u6027\u6D4B\u8BD5/\u81EA\u5B9A\u4E49\u5C5E\u6027\u6D4B\u8BD5.py=utf-8
2525
encoding//\u5217\u8868/QListView/\u663E\u793A\u81EA\u5B9A\u4E49Widget.py=utf-8
2626
encoding//\u5217\u8868/QListView/\u663E\u793A\u81EA\u5B9A\u4E49Widget\u5E76\u6392\u5E8F.py=utf-8
27+
encoding//\u5217\u8868/QListWidget/\u5220\u9664\u81EA\u5B9A\u4E49Item.py=utf-8
2728
encoding//\u5217\u8868/QListWidget/\u817E\u8BAF\u89C6\u9891\u70ED\u64AD\u5217\u8868/TencentMovieHotPlay.py=utf-8
2829
encoding//\u5217\u8868/QListWidget/\u817E\u8BAF\u89C6\u9891\u70ED\u64AD\u5217\u8868/TencentMovieHotPlay_Flow.py=utf-8
2930
encoding//\u5217\u8868/QListWidget/\u817E\u8BAF\u89C6\u9891\u70ED\u64AD\u5217\u8868/TencentMovieHotPlay_ListWidget.py=utf-8

‎列表/QListWidget/README.md

-83
This file was deleted.
Loading
+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
Created on 2018年11月4日
6+
@author: Irony
7+
@site: https://pyqt5.com, https://github.com/892768447
8+
@email: 892768447@qq.com
9+
@file: 删除Item
10+
@description:
11+
"""
12+
from PyQt5.QtCore import QSize, pyqtSignal
13+
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLineEdit, QPushButton,\
14+
QListWidgetItem, QVBoxLayout, QListWidget
15+
16+
17+
__Author__ = """By: Irony
18+
QQ: 892768447
19+
Email: 892768447@qq.com"""
20+
__Copyright__ = 'Copyright (c) 2018 Irony'
21+
__Version__ = 1.0
22+
23+
24+
class ItemWidget(QWidget):
25+
26+
itemDeleted = pyqtSignal(QListWidgetItem)
27+
28+
def __init__(self, text, item, *args, **kwargs):
29+
super(ItemWidget, self).__init__(*args, **kwargs)
30+
self._item = item # 保留list item的对象引用
31+
layout = QHBoxLayout(self)
32+
layout.setContentsMargins(0, 0, 0, 0)
33+
layout.addWidget(QLineEdit(text, self))
34+
layout.addWidget(QPushButton('x', self, clicked=self.doDeleteItem))
35+
36+
def doDeleteItem(self):
37+
self.itemDeleted.emit(self._item)
38+
39+
def sizeHint(self):
40+
# 决定item的高度
41+
return QSize(200, 40)
42+
43+
44+
class Window(QWidget):
45+
46+
def __init__(self, *args, **kwargs):
47+
super(Window, self).__init__(*args, **kwargs)
48+
layout = QVBoxLayout(self)
49+
50+
# 列表
51+
self.listWidget = QListWidget(self)
52+
layout.addWidget(self.listWidget)
53+
54+
# 清空按钮
55+
self.clearBtn = QPushButton('清空', self, clicked=self.doClearItem)
56+
layout.addWidget(self.clearBtn)
57+
58+
# 添加测试数据
59+
self.testData()
60+
61+
def doDeleteItem(self, item):
62+
# 根据item得到它对应的行数
63+
row = self.listWidget.indexFromItem(item).row()
64+
# 删除item
65+
item = self.listWidget.takeItem(row)
66+
# 删除widget
67+
self.listWidget.removeItemWidget(item)
68+
del item
69+
70+
def doClearItem(self):
71+
# 清空所有Item
72+
for _ in range(self.listWidget.count()):
73+
# 删除item
74+
# 一直是0的原因是一直从第一行删,删掉第一行后第二行变成了第一行
75+
# 这个和删除list [] 里的数据是一个道理
76+
item = self.listWidget.takeItem(0)
77+
# 删除widget
78+
self.listWidget.removeItemWidget(item)
79+
del item
80+
81+
def testData(self):
82+
# 生成测试数据
83+
for i in range(100):
84+
item = QListWidgetItem(self.listWidget)
85+
widget = ItemWidget('item: {}'.format(i), item, self.listWidget)
86+
# 绑定删除信号
87+
widget.itemDeleted.connect(self.doDeleteItem)
88+
self.listWidget.setItemWidget(item, widget)
89+
90+
91+
if __name__ == '__main__':
92+
import sys
93+
import cgitb
94+
sys.excepthook = cgitb.enable(1, None, 5, 'text')
95+
from PyQt5.QtWidgets import QApplication
96+
app = QApplication(sys.argv)
97+
w = Window()
98+
w.show()
99+
sys.exit(app.exec_())

‎列表/README.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,12 @@
2424
1. 使用`QNetworkAccessManager`进行异步下载数据和图片
2525
2. 滚动条滑动到底部加载更多
2626

27-
![截图](QListWidget/腾讯视频热播列表/ScreenShot/1.gif)
27+
![截图](QListWidget/腾讯视频热播列表/ScreenShot/1.gif)
28+
29+
### 3. [删除自定义Item](QListWidget/删除自定义Item.py)
30+
1. 删除item时先要通过`QListWidget.indexFromItem(item).row()`得到它的行数
31+
2. 通过`takeItem`函数取出该Item并删除掉,`item = self.listWidget.takeItem(row)`
32+
3. 移除item对应的自定义控件`self.listWidget.removeItemWidget(item)`
33+
4. 如果是清空所有Item,可以通过循环删除,但是删除的时候行号一直是0即可,原因和删除list数组一样。
34+
35+
![截图](QListWidget/ScreenShot/删除自定义Item.gif)

0 commit comments

Comments
 (0)
Please sign in to comment.