实战PyQt5: 100-给应用添加拖放支持
文章插图
在GUI应用开发中 , 使用拖放技术在不同控件或者应用之间进行数据交换 , 是一种常见的交互功能 。 使用该技术的典型示例就是在Windows系统的资源管理器中移动或复制文件 。 在资源管理里 , 如果要将文件移动到另一个目录 , 只需用鼠标左键单击文件图标并按住不放 , 将文件拖动到目标目录 , 然后再释放鼠标按钮 , 则可以完成移动或者复制操作 。
一个典型的拖放操作过程 , 涉及到三个方面 , 从某个控件或者应用拖动某个对象(文件、一段文本信息等等) , 数据传递 , 放置拖动对象到目标窗口 。
拖动
- 在mousePressEvent( )中 , 记录鼠标按下时的位置;
- 在mouseMoveEvent()中 , 计算鼠标移动的距离 , 可用来防止无意的拖动 。 QApplication的下列静态方法可用来控制延迟量:
- setstartDragDistance (Distance): 拖动开始的最小移动量;
- startDragDistance(): 返回拖动开始的最小移动量;
- setstartDragTime (Time):拖动开始的按压毫秒数;
- startDragTime () : 返回拖动开始的按压毫秒数 。
- 鼠标移动超过最小移动值或按压鼠标超过最小毫秒数 , 拖动操作开始 。 此时 , 创建一个QDrag对象 , 调用exce()方法进行相关操作 。
- exec( ): 开始拖放操作,返回一个代表放置操作的枚举值 。
- setMimeData (QMimeData qmd): 设置拖放中传输的数据, 参数为QMimeData类型 。 传输文本的例子:
data =http://kandian.youth.cn/index/QMimeData ()data.setText ("Drag text")drag =QDrag (self)drag.setMimeData (data)
- mimeData (): 返回拖放过程中传输数据的QMimeData 对象 。
- setPixmap(QPixmap qpix): 设定拖放过程鼠标显示的图像 。 如:
drag.setPixmap (QPixmap ("drag.png"))
- pixmap(): 返回拖放过程中鼠标显示图像的QPixmap对象 。
- setHotSpot (QPoint pt): 设置图像的热点位置 。 如:
drag.setHotSpot (QPoint (20, 20))
- hotSpot(): 返回热点位置的QPoint对象 。
- setDragCursor(QPixmap pix, Qt.DropAction dact): 设置拖放的鼠标形状 。 第一个参数为鼠标形状的QPixmap对象;第二参数为相关操作的枚举值 , 只能是 CopyAction, MoveAction 或LinkAction 。 如:
drag.setDragCursor(QPixmap ("move_cursor.png"), Qt.MoveAction)
- dragCursor(Qt.DropAction dact): 返回dact操作的鼠标形状的QPixmap对象 。
- source(): 返回源控件的引用 。
- target(): 返回目标控件的引用 。 如果拖放的目标对象为另一应用 , 返回值为None 。
- supportedActions(): 返回当前有效操作的组合值 。
- defaultAction(): 返回缺省的操作 。
- actionChanged (Qt.DropAction dact) - 当拖放的行为被改变时 , 发射该信号 。
- targetchanged (QWidget obj) - 当目标控件被改变时 , 将会发射该信号 。
创建QMimeData方法:
data=http://kandian.youth.cn/index/QMimeData()
QMimeData类有以下方法:- setText(text): 设置文本数据(MIME型文本/文本格式) 。 如:
推荐阅读
- Axiomtek推出AIE100-903-FL-NX AI Edge系统 可在恶劣环境下运行
- 20款游戏实战!酷睿i7-10750H、锐龙9 4900H到底谁更强?
- 项目实战 | 记一次对某猥琐PHP后门的爆菊
- Redis集群做法的难点,百万并发客户端「实战」
- GTC DLI 实战培训第一课:理论与实践入门
- Python爬虫实战案例:采集爱奇艺VIP视频
- 补天白帽城市沙龙走进成都 实战化攻防推动安全产业发展
- 阿里爆款SpringBoot项目实战PDF+源码+视频分享
- 想上高频内存,主板怎么选?大雕Z490实战8套内存秀给你看
- Python数据分析:数据可视化实战教程