📅  最后修改于: 2023-12-03 14:45:49.452000             🧑  作者: Mango
有许多情况下我们需要从某些控件上拖动文本到另一个控件上,PyQt5 QSpinbox控件即为这种情况之一。使用PyQt5,我们能轻松的实现从QSpinBox控件拖动文本并将其拖放到自定义标签上的功能。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QSpinBox, QVBoxLayout
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
btn = QSpinBox(self)
btn.setRange(0, 99)
btn.setValue(0)
btn.setFixedWidth(100)
lbl = QLabel(self)
lbl.setFixedWidth(100)
vbox = QVBoxLayout()
vbox.addWidget(btn)
self.setLayout(vbox)
btn.setDragEnabled(True)
lbl.setAcceptDrops(True)
btn.dragEnterEvent = lambda e: lbl.setText("Enter")
btn.dragMoveEvent = lambda e: lbl.setText("Move")
btn.dropEvent = lambda e: lbl.setText(str(btn.value()))
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('QSpinBox Drag & Drop')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
我们首先通过如下代码创建QSpinBox和QLabel对象,并分别向QVBoxLayout对象中添加btn控件:
btn = QSpinBox(self)
btn.setRange(0, 99)
btn.setValue(0)
btn.setFixedWidth(100)
lbl = QLabel(self)
lbl.setFixedWidth(100)
vbox = QVBoxLayout()
vbox.addWidget(btn)
self.setLayout(vbox)
接着,我们通过如下代码启用btn控件的拖拽功能,并启用lbl的拖放功能:
btn.setDragEnabled(True)
lbl.setAcceptDrops(True)
然后,我们使用如下代码为btn控件的拖拽事件绑定回调函数:
btn.dragEnterEvent = lambda e: lbl.setText("Enter")
btn.dragMoveEvent = lambda e: lbl.setText("Move")
btn.dropEvent = lambda e: lbl.setText(str(btn.value()))
其中,当控件发生拖放事件时,我们设置标签的文本为相应的状态,当拖放事件完成后,我们将btn控件的值赋值给lbl标签的文本。
最后,我们使用如下代码设置窗体的标题和大小,并显示出窗体:
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('QSpinBox Drag & Drop')
self.show()
运行程序后,我们能够在QSpinBox控件中拖动数字,并将其放到自定义标签栏中。
通过上述示例,我们能够轻松实现从PyQt5 QSpinBox控件中拖动文本并将其拖放到自定义标签的功能。