拖拽功能(Drag&Drop)
'''
步骤:
1、将控件A设置为可拖拽
A.setDragEnabled(True)
2、设置控件B的两个信号属性:
0)将控件B设置为接受其它地方拖拽过来的内容
self.setAcceptDrops(True)
1)拖动还没有放下时触发
def dragEnterEvent(self, event):
print(event)
# 若拖拽含有文本,则接受,否则忽略
if event.mimeData().hasText():
event.accept()
else:
event.ignore()
2)拖动放下时触发
def dropEvent(self,event):
self.addItem(event.mimeData().text())
'''
鼠标的动作:选择文本输入框中的文本,移动到下拉框中自动添加
代码示例
# -*- coding: utf-8 -*-
# @Time : 2023/1/6 16:19
# @File : DragDrop.py
'''
拖放 = 拖动+释放
'''
from PyQt5.QtWidgets import QComboBox, QWidget, QFormLayout, QLineEdit, QApplication, QLabel
class MyCombobox(QComboBox):
def __init__(self):
super(MyCombobox, self).__init__()
self.setAcceptDrops(True) # 设置B可接收拖拽属性
def dragEnterEvent(self, e): # 将A拖到B触发
print(e)
if e.mimeData().hasText():
e.accept()
else:
e.ignore()
def dropEvent(self, e): # 在B区域松下鼠标时A触发
self.addItem(e.mimeData().text()) # self指当前的下拉列表控件,得到一个文本输入框
class DragDropDemo(QWidget):
def __init__(self):
super(DragDropDemo, self).__init__()
formlayout = QFormLayout()
formlayout.addRow(QLabel('将lineEdit控件里的内容拖拽的下拉框combobox中')) # 添加一行,标签
linedit = QLineEdit()
linedit.setDragEnabled(True) # 设置A可拖动属性
combobox = MyCombobox()
formlayout.addRow(linedit, combobox)
self.setLayout(formlayout)
self.setWindowTitle('拖拽案例')
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
main = DragDropDemo()
main.show()
sys.exit(app.exec_())