在 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 方法,以實現拖放功能。
當你運行這個程序時,你會看到一個包含一個可拖動按鈕的窗口。你可以點擊并拖動這個按鈕,將其移動到窗口中的任意位置。