python qpushbutton的拖放功能如何实现

avatar
作者
筋斗云
阅读量:0

在 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 = QMimeData()         mimeData.setText(self.text())         drag.setMimeData(mimeData)         drag.exec_(Qt.MoveAction)      def dropEvent(self, event):         position = event.pos()         self.move(position)         event.accept()  class AppDemo(QWidget):     def __init__(self):         super().__init__()         self.initUI()      def initUI(self):         self.setAcceptDrops(True)         self.button = DragButton('拖动我', 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 方法,以实现拖放功能。

当你运行这个程序时,你会看到一个包含一个可拖动按钮的窗口。你可以点击并拖动这个按钮,将其移动到窗口中的任意位置。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!