通过setMouseTracking实现用鼠标拖动控件
1 import sys
2 from PyQt5.Qt import *
3
4 class Mwindow(QWidget):
5 leftclick = False
6
7 def __init__(self):
8 super().__init__()
9 self.resize(500,500)
10 self.move(250,150)
11 self.setup_Ui()
12
13 def setup_Ui(self):
14 # self.btn = QPushButton(self)
15 # self.btn.setText("点击我")
16 # self.btn.move(230,150)
17 pass
18
19 # def mousePressEvent(self, evt) : (在窗口中直接拖动)
20 #
21 # if evt.button() == Qt.LeftButton:
22 # self.leftclick = True
23 # self.mouse_x = evt.globalX()
24 # self.mouse_y = evt.globalY()
25 # self.btn_x = self.btn.x()
26 # self.btn_y = self.btn.y()
27 #
28 #
29 # def mouseMoveEvent(self, evt):
30 # if self.leftclick == True:
31 # move_x = evt.globalX()-self.mouse_x
32 # move_y = evt.globalY()-self.mouse_y
33 # self.btn.move(self.btn_x+move_x,self.btn_y+move_y)
34 #
35 # def mouseReleaseEvent(self, evt3) :
36 # self.leftclick = False
37
38 class Mypussbutton(QPushButton):
39 longclick = False
40
41 def mousePressEvent(self, evt):
42 if evt.button() == Qt.LeftButton:
43 self.longclick = True
44 self.mouse_x = evt.globalX()
45 self.mouse_y = evt.globalY()
46 self.btn_x = self.x()
47 self.btn_y = self.y()
48
49 def mouseMoveEvent(self, evt):
50 if self.longclick == True:
51 move_x = evt.globalX() - self.mouse_x
52 move_y = evt.globalY() - self.mouse_y
53 self.move(self.btn_x+move_x,self.btn_y+move_y)
54 print(self.btn_x + move_x, self.btn_y + move_y)
55 def mouseReleaseEvent(self, evt):
56 self.longclick = False
57
58
59 if __name__ == '__main__':
60 app = QApplication(sys.argv)
61 win = Mwindow()
62 # win.setMouseTracking(True)
63 btn = Mypussbutton(win)
64 btn.setText("点击我")
65 btn.move(250,150)
66 btn.setMouseTracking(True)
67 win.show()
68 sys.exit(app.exec_())
mousePressEvent 中一定要有一个判定变量,避免鼠标移入控件时,PressEvent中对应变量没有赋值导致程序崩溃。
通过setMouseTracking实现用鼠标拖动控件的更多相关文章
- wxpython 中 用鼠标拖动控件 总结
#encoding: utf-8 import wx import os import noname class Frame( noname.MyFrame1 ): def __init__(self ...
- win10 uwp 拖动控件
我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法.其中第一个是最差的,最后的才是我希望大神你去用. Margin 移动 我们可以使用Margin移动,但这是w ...
- WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件.例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要放开,移动到控件2上再放开.在这个过程中,控 ...
- C#设置鼠标在控件上面时,改变光标形状
//设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...
- (转)C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上
原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html /********************** * 课题:将窗 ...
- 实现窗体随着鼠标移动(控件)--《用delphi开发共享软件》-15.1任务管理器
private //窗体移动: OldPos,NewPos:TPoint; bMove:Boolean; procedure TForm1.FormMouseDown(Sender: TObject; ...
- C# 在窗体上可拖动控件
最近做了一个标签打印配置功能,需要根据客户需求自定义标签格式.显示内容,这时就用到了后台生成控件,并且其控件可在窗口中进行拖动,这里仅为记录一下实现过程,方便以后使用. 结果图: 源码: using ...
- delphi 响应鼠标进入控件消息
procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;//响应进入的消息 procedure MSGLeave(var msg: TMe ...
- Qt判断鼠标在控件上
QT判断鼠标是否在某子窗口控件上方 需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝 ...
随机推荐
- Spark Dataset DataFrame 操作
Spark Dataset DataFrame 操作 相关博文参考 sparksql中dataframe的用法 一.Spark2 Dataset DataFrame空值null,NaN判断和处理 1. ...
- 输入DStream之基础数据源以及基于HDFS的实时wordcount程序
输入DStream之基础数据源以及基于HDFS的实时wordcount程序 一.Java方式 二.Scala方式 基于HDFS文件的实时计算,其实就是,监控一个HDFS目录,只要其中有新文件出现,就实 ...
- toggle() 隐藏和收缩
<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js" ...
- 3.centos 7执行service iptables save报错问题
1.报错 [root@localhost ~]# service iptables save The service command supports only basic LSB actions ( ...
- cassandra权威指南读书笔记--性能调优
cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms ...
- 2017-2018 ACM-ICPC Latin American Regional Programming Contest PART (11/13)
$$2017-2018\ ACM-ICPC\ Latin\ American\ Regional\ Programming\ Contest$$ \(A.Arranging\ tiles\) \(B. ...
- Codeforces Round #628 (Div. 2) A. EhAb AnD gCd(LCM & GCD)
题意: GCD(a,b) + LCM(a,b) = n,已知 n ,求 a,b. 思路: 设 gcd(a, b) = k, a = xk, b = yk , k + ab / k = n xy = n ...
- ACM-ICPC 2018 南京赛区网络预赛(12/12)
ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem 计算\(\sum_{i=1}^{n-1}i\cdot i!(MOD\ n)\) \(\sum_{i ...
- 在eclipse完成对Java_web项目里面资源文件的读取
Java_web项目的资源文件一般有两种: 一种是存放数据之间有联系的文件,使用xml文件 另一种是存放数据之间没有联系的文件,使用properties文件 这里我们对properties文件读写做示 ...
- HDOJ 1242
纠结1242很久了,查了题解才发现要优先队列才能成功 http://blog.chinaunix.net/uid-21712186-id-1818266.html 使人开窍之文章 优先队列,已经不算是 ...