PyQt/lesson1/list拖拽信号.py
2024-10-04 13:00:37 +08:00

71 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem, QLabel
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag
class DragLabel(QLabel):
def __init__(self, text):
super().__init__(text)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
drag = QDrag(self)
mime_data = QMimeData()
mime_data.setText(self.text())
drag.setMimeData(mime_data)
drag.exec_(Qt.MoveAction)
class ListWidget(QListWidget):
def __init__(self):
super().__init__()
self.setAcceptDrops(True)
self.setDragEnabled(True)
self.setDragDropMode(QListWidget.InternalMove)
for i in range(10):
item = QListWidgetItem(self)
label = DragLabel(f'Label {i}')
item.setSizeHint(label.sizeHint())
self.setItemWidget(item, label)
def dragEnterEvent(self, event):
if event.mimeData().hasText():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
text = event.mimeData().text()
item = QListWidgetItem(self)
label = DragLabel(text)
item.setSizeHint(label.sizeHint())
self.setItemWidget(item, label)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
list_widget1 = ListWidget()
list_widget2 = ListWidget()
self.setGeometry(300, 300, 500, 200)
self.setWindowTitle('Drag and Drop Example')
layout = QHBoxLayout()
layout.addWidget(list_widget1)
layout.addWidget(list_widget2)
self.setLayout(layout)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
sys.exit(app.exec_())