- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PyQt5每天必学之拖放事件由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在pyqt5教程的这一部分,我们将讨论拖放操作.
在电脑图形用户界面,拖放事件就是点击一个虚拟对象,并将其拖动到其他位置或到另一个虚拟物体的动作。在一般情况下,它可以被用于调用多种动作,或创建两个抽象对象之间的关联的各种类型.
拖放事件是图形用户界面的一部分。拖放操作使用户能够直观地操作一些复杂的事情.
通常情况下,我们可以拖放两种类型:数据或某些图形对象。如果我们从一个应用程序拖动图像到另一个,我们拖放的是二进制数据。如果我们拖放firefox标签并将其移动到另一个地方,我们拖放的是图形组件.
简单拖放事件 。
在这个例子中,我们有一个qlineedit控件和一个qpushbutton控件。我们从单行文本编辑控件中将输入的文本选中后拖到按钮控件上后松开鼠标,按钮的标签将发生变化.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
pyqt5 教程
这是一个简单的拖放例子。
作者:我的世界你曾经来过
博客:http://blog.csdn.net/weiaitaowang
最后编辑:2016年8月5日
"""
import
sys
from
pyqt5.qtwidgets
import
qapplication, qwidget, qlineedit, qpushbutton
class
button(qpushbutton):
def
__init__(
self
, title, parent):
super
().__init__(title, parent)
self
.setacceptdrops(true)
def
dragenterevent(
self
, e):
if
e.mimedata().hasformat(
'text/plain'
):
e.accept()
else
:
e.ignore()
def
dropevent(
self
, e):
self
.settext(e.mimedata().text())
class
example(qwidget):
def
__init__(
self
):
super
().__init__()
self
.initui()
def
initui(
self
):
edit
=
qlineedit('',
self
)
edit.setdragenabled(true)
edit.move(
30
,
65
)
button
=
button(
'按钮'
,
self
)
button.move(
190
,
65
)
self
.setgeometry(
300
,
300
,
300
,
150
)
self
.setwindowtitle(
'简单拖放'
)
if
__name__
=
=
'__main__'
:
app
=
qapplication(sys.argv)
ex
=
example()
ex.show()
sys.exit(app.exec_())
|
这个例子介绍了一个简单的拖放操作.
1
2
3
4
5
|
class
button(qpushbutton):
def
__init__(
self
, title, parent):
super
().__init__(title, parent)
self
.setacceptdrops(true)
|
为了在qpushbutton控件中显示放置的文字,我们必须将qpushbutton控件的一些方法重写。因此,我们创造我们自己的按钮类将从qpushbutton类继承.
1
|
self
.setacceptdrops(true)
|
为控件启用拖放事件.
1
2
3
4
5
|
def
dragenterevent(
self
, e):
if
e.mimedata().hasformat(
'text/plain'
):
e.accept()
else
:
e.ignore()
|
首先,重写了dragenterevent()方法。告知我们接受的数据类型(text/plain)。通常情况下,它是纯文本.
1
2
|
def
dropevent(
self
, e):
self
.settext(e.mimedata().text())
|
接下来重写了dropevent()方法,这里定义了drop事件将要做的事情。在这里我们改变按钮控件的文本.
1
2
|
edit
=
qlineedit('',
self
)
edit.setdragenabled(true)
|
若要启用qlineedit控件的拖动操作,需要做的是调用setdragenabled()方法来激活它.
程序执行后 。
拖放按钮控件 。
在下面的例子中,我们将演示如何拖放一个按钮控件.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
pyqt5 教程
在这个程序中,我们可以按上用鼠标左键点击或拖动一个按钮,用鼠标右键单击删除按钮。
作者:我的世界你曾经来过
博客:http://blog.csdn.net/weiaitaowang
最后编辑:2016年8月5日
"""
import
sys
from
pyqt5.qtwidgets
import
qapplication, qwidget, qpushbutton
from
pyqt5.qtcore
import
qt, qmimedata
from
pyqt5.qtgui
import
qdrag
class
button(qpushbutton):
def
__init__(
self
, title, parent):
super
().__init__(title, parent)
def
mousemoveevent(
self
, e):
if
e.buttons() !
=
qt.rightbutton:
return
mimedata
=
qmimedata()
drag
=
qdrag(
self
)
drag.setmimedata(mimedata)
drag.sethotspot(e.pos()
-
self
.rect().topleft())
drag.exec_(qt.moveaction)
def
mousepressevent(
self
, e):
qpushbutton.mousepressevent(
self
, e)
if
e.button()
=
=
qt.leftbutton:
print
(
'press'
)
class
example(qwidget):
def
__init__(
self
):
super
().__init__()
self
.initui()
def
initui(
self
):
self
.setacceptdrops(true)
self
.button
=
button(
'按钮'
,
self
)
self
.button.move(
100
,
65
)
self
.setgeometry(
300
,
300
,
280
,
150
)
self
.setwindowtitle(
'按钮拖放'
)
def
dragenterevent(
self
, e):
e.accept()
def
dropevent(
self
, e):
position
=
e.pos()
self
.button.move(position)
e.setdropaction(qt.moveaction)
e.accept()
if
__name__
=
=
'__main__'
:
app
=
qapplication(sys.argv)
ex
=
example()
ex.show()
sys.exit(app.exec_())
|
在我们的代码示例中,窗口有一个qpushbutton 按钮。如果我们用鼠标左键按下按钮,'press' 消息打印到控制台。如果用鼠标右键按住按钮并移动鼠标,程序将执行一个拖放按钮控件事件.
1
2
3
4
|
class
button(qpushbutton):
def
__init__(
self
, title, parent):
super
().__init__(title, parent)
|
创建一个button 类从qpushbutton派生。我们还重写了qpushbutton的两种方法:mousemoveevent()和mousepressevent()。该mousemoveevent()方法是其中拖放操作开始的地方.
1
2
|
if
e.buttons() !
=
qt.rightbutton:
return
|
在这里,我们确认执行拖放事件只能使用鼠标右键。鼠标左键被保留用于单击按钮事件.
1
2
3
4
|
mimedata
=
qmimedata()
drag
=
qdrag(
self
)
drag.setmimedata(mimedata)
drag.sethotspot(e.pos()
-
self
.rect().topleft())
|
创建qdrag 对象。这个类提供了基于mime的拖放数据传输的支持.
1
|
drag.exec_(qt.moveaction)
|
拖动对象的start()开始方法.
1
2
3
4
|
def
mousepressevent(
self
, e):
qpushbutton.mousepressevent(
self
, e)
if
e.button()
=
=
qt.leftbutton:
print
(
'press'
)
|
如果我们使用鼠标左键点击按钮,打印 ‘press' 到控制台。请注意,我们使用mousepressevent()方法获取鼠标按键信息.
1
2
|
position
=
e.pos()
self
.button.move(position)
|
在dropevent()方法中的代码告诉我们,松开鼠标按钮完成拖放操作。找出当前鼠标指针位置并将按钮移动到相应的位置.
1
2
|
e.setdropaction(qt.moveaction)
e.accept()
|
我们指定放置动作的类型。在当前情况下,它是一个移动动作.
程序执行后 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.csdn.net/weiaitaowang/article/details/52131159 。
最后此篇关于PyQt5每天必学之拖放事件的文章就讲到这里了,如果你想了解更多关于PyQt5每天必学之拖放事件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题在这里已经有了答案: Difference between Property and Field in C# 3.0+ (10 个答案) 关闭 10 年前。 我不明白静态属性之间的区别: p
当元素被拖放时,有没有办法从被拖动的元素中获取 id(或其他属性值)? 例如,在左侧,我有一堆 div,我可以将图像放入其中。右边有一个 div 用来保存图像。当我将图像从右侧拖动到左侧的 div 时
每当我更改其中一个类属性时,我想设置一个修改标志,如下所示 public bool Modified { get; set; } public bool Enabled { get; set { Mo
由于某种原因,我下面的代码曾经可以正常工作,但现在却引发了一个异常: public static async Task HttpPut(string inUrl, string inFilePath)
为什么将 ; 放在最佳实践中?在函数定义的末尾。 例如 var tony = function () { console.log("hello there"); }; 优于: var tony
我在容器内有一个位图。当我拖动容器时,光标变为编辑文本形状,图像也跳到光标的右下角(好像我从左上角拿着图像并拖动它)。 这是我的代码,所以你可以看到我有 RTFM: function createIc
这个问题已经有答案了: C# 3.0 auto-properties — useful or not? [closed] (17 个回答) 已关闭 6 年前。 当我让 Visual Studio 20
以类中的以下代码为例: public class Employee : IEntity { public string FirstName { get; set; } public s
我有 json 数据: { "products": [ { "productId" : 0, "productImg" : "../img/product-ph
这个问题在这里已经有了答案: What is the difference between a field and a property? (33 个答案) 关闭 9 年前。 我在一本书上找到这样声
我正在设置多个方法,想知道如何继续将一个变量(“顶部”变量)传递给不同的方法。 主要方法: public static void Main(string[] args) { i
我正在尝试使用 crontab 编写一个简单的任务,将一些文件从本地复制到 HDFS。我的代码是这样的: #!/bing/ksh ANIO=$(date +"%Y") MES=$(date +"%m"
有人可以告诉我如何使用这个解决方案来解决我的问题吗?我也想限制 id 中包含文本“not”的节点的拖/放。 jsTree drag and drop restrict folders by class
我的情况如下 - 我正在对可能包含链接行的表进行排序: row 1 row 2 row 3 row 4 row 5 我需要的是禁止在.linked-to-p
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我在理解似乎不一致的方案中的破坏性操作时遇到问题。即为什么下例中bar没有变化 (define foo '(a b)) (define bar foo) (set! foo '(c d)) foo >
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我在理解似乎不一致的方案中的破坏性操作时遇到问题。即为什么下例中bar没有变化 (define foo '(a b)) (define bar foo) (set! foo '(c d)) foo >
我在我的 Web 应用程序中使用 Ajax ControlToolkit 中的 ModalPopupExtender。我将其 Drag 属性设置为 true,但是当我拖动弹出面板并将其放到新位置时,它
所以,基于this answer ,我有一组可以拖放并卡入到位的 div。唯一的问题是,可拖动的 div 具有不同的高度,我需要它们始终捕捉到目标的底部,而不是顶部。 您可以在this JsFiddl
我是一名优秀的程序员,十分优秀!