让控件支持拖拽动作
A.setDragEnable(True) 设置A可以拖动
B.setAcceptDrops(True) 设置B可以接受拖动
B需要满足两个事件
1.dragEnterEvent 将A拖到B触发
2.dropEvent 在B的区域放下A时发生触发
具体实现代码如下所示:
import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MyComboBox(QComboBox):
def __init__(self):
super(MyComboBox,self).__init__()
self.setAcceptDrops(True) #设置可以接受拖动
def dragEnterEvent(self,e):
print(e)
if e.mimeData().hasText():
e.accept()
else:
e.ignore()
def dropEvent(self, e):
self.addItem(e.mimeData().text())
class Dragdomo(QWidget):
def __init__(self):
super(Dragdomo,self).__init__()
formlayout=QFormLayout()
formlayout.addRow(QLabel("将左边的文本拖动到右边"))
lineEdit=QLineEdit()
lineEdit.setDragEnabled(True) #设置可以被拖动
combo=MyComboBox()
formlayout.addRow(lineEdit,combo)
self.setLayout(formlayout)
self.setWindowTitle("拖动案例")
if __name__=="__main__":
app=QApplication(sys.argv)
p=Dragdomo()
p.show()
sys.exit(app.exec_())