1. 程式人生 > 實用技巧 >PyQt5 控制元件拖拽

PyQt5 控制元件拖拽

讓控制元件支援拖拽動作
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_())