📜  PyQt5 QSpinbox - 从中拖动文本并将其拖放到自定义标签(1)

📅  最后修改于: 2023-12-03 14:45:49.452000             🧑  作者: Mango

PyQt5 QSpinBox - 从中拖动文本并将其拖放到自定义标签

有许多情况下我们需要从某些控件上拖动文本到另一个控件上,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 Drag & Drop

总结

通过上述示例,我们能够轻松实现从PyQt5 QSpinBox控件中拖动文本并将其拖放到自定义标签的功能。