在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 开发者

[译] 在 Android Instant App(安卓即时应用程序)中启用 ProGuard (混淆)

1533
来自专栏Golang语言社区

Go语言开发Windows应用

当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场。Go不是脚本语言,但却有着脚本语言的轻便简单的...

3416
来自专栏屈定‘s Blog

工作--用户登录注册相关设计

最近做一个网站,网站需要用户登录注册,自然也就需要一套高扩展性的用户模块设计,该篇文章记录笔者遇到问题的解决方案,希望对你有帮助。

1125
来自专栏程序员宝库

打造一个属于自己的 server

什么是server 在开始打造自己的服务器之前,我们首先明确一下服务器的定义:一个管理资源并为用户提供服务的计算机软件。 根据功能服务器分为两类: static...

3159
来自专栏华仔的技术笔记

iOS 程序秒退原因分析及解决思路总结

3465
来自专栏程序猿

第三节:如何使用Burp Suite代理

Burp Proxy 是Burp Suite以用户驱动测试流程功能的核心,通过代理模式,可以让我们拦截、查看、修改所有在客户端和服务端之间传输的...

36312
来自专栏pangguoming

20个代码生成框架 (.NET JAVA)

1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:...

6636
来自专栏小文博客

为你的站点加上“懒加载”——提高用户体验&节省流量

通常来说,一个正常web页面是由图片和文字以及各种CSS,JS构成,而这其中,拖慢网速的罪魁祸首就是图片。懒加载即将页面中的图片分布加载,边浏览边加载,从而减轻...

3479
来自专栏安富莱嵌入式技术分享

emWin洗衣机简易操作界面,含uCOS-III和FreeRTOS两个版本

配套例子: V6-904_STemWin提高篇实验_洗衣机简易操作界面(uCOS-III) V6-905_STemWin提高篇实验_洗衣机简易操作界面(Fre...

975
来自专栏技术记录

rabbitMQ教程(二)一篇文章看懂rabbitMQ

一、rabbitMQ是什么:   RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。   学过...

2437

扫码关注云+社区