| 21 | |
| 22 | |
| 23 | class DropListWidget(QListWidget): |
| 24 | # 可以拖进来的QListWidget |
| 25 | |
| 26 | def __init__(self, *args, **kwargs): |
| 27 | super(DropListWidget, self).__init__(*args, **kwargs) |
| 28 | self.resize(400, 400) |
| 29 | self.setAcceptDrops(True) |
| 30 | # 设置从左到右、自动换行、依次排列 |
| 31 | self.setFlow(self.LeftToRight) |
| 32 | self.setWrapping(True) |
| 33 | self.setResizeMode(self.Adjust) |
| 34 | # item的间隔 |
| 35 | self.setSpacing(5) |
| 36 | |
| 37 | def makeItem(self, size, cname): |
| 38 | item = QListWidgetItem(self) |
| 39 | item.setData(Qt.UserRole + 1, cname) # 把颜色放进自定义的data里面 |
| 40 | item.setSizeHint(size) |
| 41 | label = QLabel(self) # 自定义控件 |
| 42 | label.setMargin(2) # 往内缩进2 |
| 43 | label.resize(size) |
| 44 | pixmap = QPixmap(size.scaled(96, 96, Qt.IgnoreAspectRatio)) # 调整尺寸 |
| 45 | pixmap.fill(QColor(cname)) |
| 46 | label.setPixmap(pixmap) |
| 47 | self.setItemWidget(item, label) |
| 48 | |
| 49 | def dragEnterEvent(self, event): |
| 50 | mimeData = event.mimeData() |
| 51 | if not mimeData.property('myItems'): |
| 52 | event.ignore() |
| 53 | else: |
| 54 | event.acceptProposedAction() |
| 55 | |
| 56 | def dropEvent(self, event): |
| 57 | # 获取拖放的items |
| 58 | items = event.mimeData().property('myItems') |
| 59 | event.accept() |
| 60 | for item in items: |
| 61 | # 取出item里的data并生成item |
| 62 | self.makeItem(QSize(100, 100), item.data(Qt.UserRole + 1)) |
| 63 | |
| 64 | |
| 65 | class DragListWidget(QListWidget): |