我们可以使用QLabel控件来代替QLineEdit控件,并添加相应的事件处理程序以实现拖放文本。以下是一个示例代码:
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag
import sys
class MyLabel(QLabel):
def __init__(self, parent):
super().__init__(parent)
self.setAcceptDrops(True)
self.setAlignment(Qt.AlignCenter)
self.setText("Drag Text Here")
def dragEnterEvent(self, event):
if event.mimeData().hasText():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
self.setText(event.mimeData().text())
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
label = MyLabel(self)
self.setCentralWidget(label)
app = QApplication(sys.argv)
window = MyWindow()
window.show()
app.exec_()
在这个示例中,我们创建了一个自定义的QLabel类MyLabel,它继承自QLabel,并覆盖了两个事件处理程序:dragEnterEvent和dropEvent。我们在MyLabel的构造函数中设置了一些属性,并将其标记为可接受拖放事件。
在dragEnterEvent中,我们检查QDragEnterEvent的mimeData对象是否包含文本数据。如果是,我们接受拖放事件,否则忽略它。
在dropEvent中,我们将拖放事件的mimeData中的文本设置为MyLabel的文本,以显示拖放的文本数据。
最后,我们创建了一个MyWindow类,并在其中心放置了MyLabel的实例,此时我们就可以在MyLabel中进行简单的拖放操作,而不需要QLineEdit。