实战PyQt5: 100-给应用添加拖放支持( 三 )
- mimeData(): 返回含有所传输数据和MIME类型信息的QMimeData类的实例 。
- pos(): 返回QPoint类的实例 , 为拖放对象放置的整数坐标 。
- posF():返回QPointF类的实例 , 为拖放对象放置的浮点坐标 。
- possibleAction(): 返回拖放可能的操作组合 , 如:
if event.possibleActions () & Qt.MoveAction:print ("Move Action")if event.possibleActions () &Qt.CopyAction:print ("Copy Action")
- proposedAction(): 返回默认的放置操作;
- acceptProposedAction():表示已准备好接受传输的数据和由proposalAction()返回的默认操作 。 该方法(或者accept()方法)必须在dragEnterEvent()中调用 , 否则 , dropEvent()不会被调用 。
- setDropAction(action): 允许在放置时指定为action. 做了此设置后 , 必须调用accept( )方法, 而不是acceptProposedAction( )方法 。
- dropAction(): 返回放置时进行的操作 。 如果用setDropAction( )进行了更改 , 可能与proposedAction ()的返回值不一致 。
- keyboardModifiers(): 用于判断按下了哪些修饰键 (, , , 等) 。
- mouseButtons(): 用于判断在拖放过程中按下的鼠标键 。
- source( ): 如果拖放是从另一个应用程序来的 , 返回为None;否则 , 返回对拖放源控件的引用 。
- accept(QRect rect): 表明允许后续的移动操作 。rect用来指定可接受拖放操作的区域 。
- ignore(QRect rect): 表明不允许后续的移动操作 。rect用来指定不接受拖放操作的区域 。
- answerRect (): 返回可接受拖放操作区域的QRect对象 。
拖放测试测试代码中MyLabel类继承自QLabel , 它可以接收QLineEdit里面选中的文字拖入并显示 。 完整代码如下:
import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qtfrom PyQt5.QtGui import QFontfrom PyQt5.QtWidgets import (QApplication, QWidget, QLineEdit, QFrame, QLabel, QVBoxLayout) class MyLabel(QLabel):def __init__(self, title, parent = None):super(MyLabel, self).__init__(title, parent)#接受拖入操作self.setAcceptDrops(True)#加边框self.setFrameShape(QFrame.Box)self.setLineWidth(1)#文字居中显示self.setAlignment(Qt.AlignCenter)#字体加大显示self.setFont(QFont(self.font().family(), 24))#拖动进入事件def dragEnterEvent(self, event):if(event.mimeData().hasFormat('text/plain')):event.accept()else:event.ignore()#放置事件def dropEvent(self, event):self.setText(event.mimeData().text()) class DemoDragDropEvent(QWidget):def __init__(self, parent=None):super(DemoDragDropEvent, self).__init__(parent)# 设置窗口标题self.setWindowTitle('实战PyQt5: 拖放操作演示')# 设置窗口大小self.resize(400, 160)self.initUi()def initUi(self):mainLayout = QVBoxLayout()editBox = QLineEdit('拖动选中的文字')editBox.setDragEnabled(True)textBox = MyLabel('文字拖放到这里')mainLayout.addWidget(editBox)mainLayout.addWidget(textBox)self.setLayout(mainLayout)if __name__ == '__main__':app = QApplication(sys.argv)window = DemoDragDropEvent()window.show()sys.exit(app.exec())
运行效果如下图所示:文章插图
拖放技术演示
本文知识点
- 拖放技术的实现过程 。
推荐阅读
- Axiomtek推出AIE100-903-FL-NX AI Edge系统 可在恶劣环境下运行
- 20款游戏实战!酷睿i7-10750H、锐龙9 4900H到底谁更强?
- 项目实战 | 记一次对某猥琐PHP后门的爆菊
- Redis集群做法的难点,百万并发客户端「实战」
- GTC DLI 实战培训第一课:理论与实践入门
- Python爬虫实战案例:采集爱奇艺VIP视频
- 补天白帽城市沙龙走进成都 实战化攻防推动安全产业发展
- 阿里爆款SpringBoot项目实战PDF+源码+视频分享
- 想上高频内存,主板怎么选?大雕Z490实战8套内存秀给你看
- Python数据分析:数据可视化实战教程