在Python GUI中实现一个拖放功能

在之前的文章中,构建了一个稍显复杂的GUI并且使用Qthread进行了线程的管理。

本篇,我们继续学习PyQt5的使用——介绍在GUI中使用拖放(Drag 和Drop)控件。

1

拖放动作

在GUI中,拖放指的是点击一个对象,并将其拖动到另一个对象上的动作。比如百度云PC客户端支持的拖放文件以快速移动文件:

拖放动作能够很直观很方便的在GUI程序中完成一些很复杂或繁琐的操作。

2

在PyQt中实现拖放

在PyQt5中,我们也可以很轻松地使用拖放功能。

使用Qt设计师或者使用API都可以实现。我们先使用Qt设计师将GUI的图形设计出来,在之前的GUI的基础上,我们新建一个选项卡。

我们新建了一个选项卡,然后在里面放置了一个LineEdit部件,一个PushButton部件,两个ListWidget部件。

对于简单的拖放效果,我们可以直接使用Qt设计师中的选项进行设置。例如,我们直接可以使用dragEnable属性、dragDropOverwriteMode属性、dragDropMode属性为ListWidget部件设置拖放功能:

而一些稍微复杂的拖放功能,就需要编写Python逻辑处理代码来完成了。

我们先将UI文件保存并转换为Python文件。

然后,新建一个Python文嘉drag.py,在文件中引入刚刚转换好的Python文件:

运行代码正常:

接着,我们创建一个DragDropButton()类,用来处理按钮的拖放:

我们使用setAcceptDrops属性设置按钮接收拖放事件,创建一个dragEnterEvent()方法用来设置拖的事件响应,创建一个dropEvent()方法用来设置放的事件响应。

接着我们在MainWindow()主类中,调用它:

最后,运行一下看看:

在上面的程序中,我们能够将文本拖放到按钮上。

在本篇中,我们在GUI中简单的实现了列表框、文本框和按钮的文本拖放。更多的功能、事件和实现方法,还请大家翻阅文档,更加深入的了解。

PS:点击“阅读原文”查看完整的代码块

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非著名程序员

Android Material Design系列之主题样式介绍说明等

今天这篇文章应该算是Material Design系列的补充篇,因为这篇文章本来应该放到前面讲的,因为讲的是主题嘛,对于一些状态和颜色的介绍,因为我们一新建一个...

1947
来自专栏FD的专栏

React 中引入 Angular 组件

为了在我的编辑器中使用 Angular,我用 Angular 编写了一个重命名功能。而为了使用它,我得再次使用一次 customEvent,而在这个微前端架构的...

923
来自专栏美丽应用

SkyOlin助手:使应用窗口化的黑科技

1383
来自专栏Jerry的SAP技术分享

让您的Eclipse具有千变万化的外观

大家每天用Eclipse做Java开发,是否厌倦了Eclipse千篇一律的白色背景呢?

1292
来自专栏JetpropelledSnake

Notepad++ 主题配色配置

1.6K3
来自专栏游戏杂谈

HTML5的Histroy API

比较典型的是GitHub,在点击代码文件夹和文件时,会发现它的url地址栏变换了、标题栏变化了、前进后退按钮也变化了(跟新开了一个新页面感觉一样),但体验起来很...

1273
来自专栏破晓之歌

vue引入各类ui库 原

本身集成并没有vue的部分,我们采用的方式是把ui-css部分拿来使用,js效果自己用jquery写到methods里

3425
来自专栏前端说吧

flag - 4-5月份预整理总结的文章目录

1133
来自专栏数据之美

Web 自动化测试与智能爬虫利器:PhantomJS 简介与实战

估计部分同学没听过这个工具,那先简单介绍下它的背景与作用。 1、PhantomJS 是什么? PhantomJS是一个基于WebKit的服务器端JavaScri...

4769
来自专栏大数据钻研

前端开发面试题总结之——HTML

---- 相关知识点 web标准、 web语义化、 浏览器内核、 兼容性、 html5... 题目&答案 Doctype作用?严格模式与混杂模式如何区分?它们有...

3468

扫码关注云+社区