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实现用鼠标拖动控件的更多相关文章

  1. wxpython 中 用鼠标拖动控件 总结

    #encoding: utf-8 import wx import os import noname class Frame( noname.MyFrame1 ): def __init__(self ...

  2. win10 uwp 拖动控件

    我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法.其中第一个是最差的,最后的才是我希望大神你去用. Margin 移动 我们可以使用Margin移动,但这是w ...

  3. WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

    在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件.例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要放开,移动到控件2上再放开.在这个过程中,控 ...

  4. C#设置鼠标在控件上面时,改变光标形状

    //设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...

  5. (转)C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上

    原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html /********************** * 课题:将窗 ...

  6. 实现窗体随着鼠标移动(控件)--《用delphi开发共享软件》-15.1任务管理器

    private //窗体移动: OldPos,NewPos:TPoint; bMove:Boolean; procedure TForm1.FormMouseDown(Sender: TObject; ...

  7. C# 在窗体上可拖动控件

    最近做了一个标签打印配置功能,需要根据客户需求自定义标签格式.显示内容,这时就用到了后台生成控件,并且其控件可在窗口中进行拖动,这里仅为记录一下实现过程,方便以后使用. 结果图: 源码: using ...

  8. delphi 响应鼠标进入控件消息

    procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;//响应进入的消息 procedure MSGLeave(var msg: TMe ...

  9. Qt判断鼠标在控件上

    QT判断鼠标是否在某子窗口控件上方 需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝 ...

随机推荐

  1. js异步、事件循环(EventLoop)小结

    单线程 众所周知,JS是单线程的语言,之所以是单线程,用一句烂大街的话就是,如果两个线程同时操作一个DOM节点,那么该以哪个为准呢,虽然多线程也有办法解决,但是js毕竟是浏览器脚本语言,不需要那么复杂 ...

  2. Gitlab + DRBD HA

    部署简介: 为了gitlab有容灾的能力,所以部署一个HA的小集群,用到的软件有 gitlab 和brbd,目前现有环境为 master节点 系统版本:CentOS release 6.5 (Fina ...

  3. ubuntu14.04 ssh允许root用户远程登录

    vi /etc/ssh/sshd_config #注释掉 #PermitRootLogin without-password # Authentication: LoginGraceTime 120 ...

  4. Linux-apache httd.conf文件详解

    Linux-apache httd.conf文件详解 # This is the main Apache server configuration file. It contains the # co ...

  5. Pythonchallenge1过关攻略

    第一关上来是一个电视,上面写着2^38,这就非常关键了,这时候我们已经有了大致思路,再看一眼电视机下面的话确认一下,"Hint: try to change the URL address. ...

  6. Codeforces Global Round 9 A. Sign Flipping

    题目链接:https://codeforces.com/contest/1375/problem/A 题意 给出一个大小为 $n$ 的数组 $a$,可以反转每个数的正负,要求: 至少有 $\frac{ ...

  7. Educational Codeforces Round 90 (Rated for Div. 2) C. Pluses and Minuses(差分)

    题目链接:https://codeforces.com/contest/1373/problem/C 题意 给出一个只含有 $+$ 或 $-$ 的字符串 $s$,按如下伪代码进行操作: res = 0 ...

  8. P2765 魔术球问题 (网络流)

    题意:n根柱子 把编号1,2,3....的球依次插到柱子上去 需要满足相邻的两个球编号加起来为完全平方数 n < 55 题解:网络流24(23)题里的 但是一直不知道怎么建图  或者说建图的意义 ...

  9. 【noi 2.6_6049】买书(DP)

    题意:有N元,有无限多本10.20.50和100元的书,问有几种购买方案. 解法:f[i]表示用 i 元的方案数.还有一个 j 循环这次买多少元的书. 注意--要先 j 循环,再 i 循环.因为要先考 ...

  10. hdu3461 Code Lock

    Problem Description A lock you use has a code system to be opened instead of a key. The lock contain ...