在 PyQt5 中,要实现 QPushButton 的拖放功能,你需要重新实现一些方法,如 mousePressEvent、mouseMoveEvent 和 dropEvent。以下是一个简单的例子:
import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout from PyQt5.QtCore import Qt, QMimeData from PyQt5.QtGui import QDrag class DragButton(QPushButton): def __init__(self, title, parent): super().__init__(title, parent) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.dragStartPosition = event.pos() super().mousePressEvent(event) def mouseMoveEvent(self, event): if not (event.buttons() & Qt.LeftButton): return if ((event.pos() - self.dragStartPosition).manhattanLength() < QApplication.startDragDistance()): return drag = QDrag(self) mimeData = https://www.yisu.com/ask/QMimeData()'拖动我', self) self.button.move(100, 65) self.setWindowTitle('QPushButton 拖放示例') self.setGeometry(300, 300, 600, 400) if __name__ == '__main__': app = QApplication(sys.argv) demo = AppDemo() demo.show() sys.exit(app.exec_())
这个例子中,我们创建了一个名为 DragButton 的自定义按钮类,它继承自 QPushButton。然后我们重写了 mousePressEvent、mouseMoveEvent 和 dropEvent 方法,以实现拖放功能。
当你运行这个程序时,你会看到一个包含一个可拖动按钮的窗口。你可以点击并拖动这个按钮,将其移动到窗口中的任意位置。