通过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()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝 ...
随机推荐
- 通过spring statemmachine 自定义构建属于自己的状态机(两种方式)
spring 的stateMachine 相对于当前的版本,还是比较新颖的,但是对于合适的业务场景,使用起来还是十分的方便的.但是对于官网提供的文档,讲解的是十分的精简,要想更深入的了解其内部架构,只 ...
- Manacher(马拉车)算法详解
给定一个字符串,求出其最长回文子串 eg: abcba 第一步: 在字符串首尾,及各字符间各插入一个字符(前提这个字符未出现在串里). 如 原来ma /* a b a b c ...
- HDU 6264 (深搜,数论)
题目链接 题意 求\(\sum_{d|n}\phi (d) \times {n\over d}\),其中\(\phi(n) = n\prod_{p|n}({1-{1\over p}})\) 分析 将\ ...
- Codeforces Round #666 (Div. 2)
比赛链接:https://codeforces.com/contest/1397 A. Juggling Letters 题意 给出 $n$ 个字符串,可在字符串间任意移动字母,问最终能否使这 $n$ ...
- AtCoder - agc043_a 和 POJ - 2336 dp
题意: 给你一个n行m列由'#'和'.'构成的矩阵,你需要从(1,1)点走到(n,m)点,你每次只能向右或者向下走,且只能走'.'的位置. 你可以执行操作改变矩阵: 你可以选取两个点,r0,c0;r1 ...
- Broken robot CodeForces - 24D (三对角矩阵简化高斯消元+概率dp)
题意: 有一个N行M列的矩阵,机器人最初位于第i行和第j列.然后,机器人可以在每一步都转到另一个单元.目的是转到最底部(第N个)行.机器人可以停留在当前单元格处,向左移动,向右移动或移动到当前位置下方 ...
- 或许你知道Python的shell,那jshell呢?
Java 10以后,java官方推出了类似python的shell操作的jshell,你的指令可以及时反馈,对于新手学习而言非常有用.如果你和我一样刚学Java,建议你使用高版本,和我一起开始使用js ...
- InnoDB 存储引擎简介
InnoDB 核心特性 MVCC(Multi-Version Concurrency Control,多版本并发控制),事务处理,行级锁,热备份,自动故障恢复( Crash Safe Recovery ...
- Linux-单用户/救援模式
目录 企业案例一:忘记root密码 企业案例二:修改了默认的运行级别为poweroff或者reboot 企业案例三:误损坏MBR(只能以救援模式解决) 企业案例四:误删除GRUB菜单(只能以救援模式解 ...
- K8S(04)核心插件-coredns服务
K8S核心插件-coredns服务 目录 K8S核心插件-coredns服务 1 coredns用途 1.1 为什么需要服务发现 2 coredns的部署 2.1 获取coredns的docker镜像 ...