wxpython 中 用鼠标拖动控件 总结
#encoding: utf-8
import wx
import os
import noname class Frame( noname.MyFrame1 ):
def __init__(self,parent):
noname.MyFrame1.__init__(self,parent)
self.curBitmap = None
self.curBitmapPostion = None
self.curPointerPos = None
def m_createBitmap_buttonOnButtonClick ( self,event ):
event.Skip()
def m_bitmap1OnLeftDown ( self,event ):
self.curBitmapPostion = self.m_bitmap1.GetPosition()
self.curPointerPos = event.GetPosition()
event.Skip()
def m_bitmap1OnMotion ( self,event ):
if event.Dragging() and event.LeftIsDown() :
pos = event.GetPosition() - self.curPointerPos
self.curBitmapPostion += pos
statusVal = 'X = %d Y = %d' %(self.curBitmapPostion.x,self.curBitmapPostion.y)
self.m_statusBar1.SetStatusText(statusVal)
self.m_bitmap1.Move(self.curBitmapPostion)
event.Skip()
实现的功能是在panel上创建一个staticBitmap,然后可以用鼠标在panel上任意随鼠标拖动staticBitmap。
实际上可以拖动任意控件。
思路:
监听staticBitmap(被拖动控件)的wx.EVT_MOTION,和wx.EVT_LEFT_DOWN 事件。
当鼠标左键在staticBitmap上按下是记录此刻:
1,鼠标的位置(event.GetPosition() 这是相对坐标,而且是相对监听控件的(这里监听它的是staticBitmap))。
2,staticBitmap(被拖动控件)的位置(staticBitmap的GetPosition() 返回的是控件左上角相对父控件的位置)。
鼠标的位置是用来计算偏移的,staticBitmap的位置加上这个偏移就是被拖动的位置。
调用staticBitmap的Move(Point),将控件移动到相对父控件的。
碰到的一些问题:
1,并不是所有的event,调用Skip() 后都传递给父控件。下面链接有解答。
http://stackoverflow.com/questions/11606068/about-event-skip,
2,一开始是监听panel的wx.EVT_MOTION,但是鼠标一放到staticBitmap上,panel就监听不到这个事件了。上面链接提到了
wx.PostEvent(staticBitmap(被拖动控件).GetParent(),event),本来想把事件post给panel,这样panel来计算鼠标偏移,这样更准确,不会有闪烁的情况。但是post成功了,但是panel里面触发了这个事件,但是event.GetPosition() 依然是相对staticBitmap(被拖动控件)的,而不是相对panel(父控件)的,虽然事件触发了。
wxpython 中 用鼠标拖动控件 总结的更多相关文章
- 通过setMouseTracking实现用鼠标拖动控件
1 import sys 2 from PyQt5.Qt import * 3 4 class Mwindow(QWidget): 5 leftclick = False 6 7 def __init ...
- wxPython中按钮、文本控件的简单运用
本节学习图形用户界面 ------------------------ 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地 ...
- NGUI中获取鼠标在控件内部坐标
在UIWidget 中添加以下函数.获得的坐标系是以右上角为原点坐标,x轴向左,一轴向下. public Vector2 GetTouchPoint() { Vector3 p0 = cachedT ...
- (转)C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上
原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html /********************** * 课题:将窗 ...
- WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件.例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要放开,移动到控件2上再放开.在这个过程中,控 ...
- HTML中禁用表单控件的两种方法readonly与disabled
时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...
- win10 uwp 拖动控件
我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法.其中第一个是最差的,最后的才是我希望大神你去用. Margin 移动 我们可以使用Margin移动,但这是w ...
- WinForm/Silverlight多线程编程中如何更新UI控件的值
单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...
- Android中查找一个Layout中指定的子控件
我们通常希望查找一个页面中指定类型的控件,单个控件知道id很容易找到,但是如果是多个呢?或者说是在程序中自定义的控件,且不知道id怎么办呢?如想找到页面中的Spinner,可用以下方法 /** * 从 ...
随机推荐
- mysql命令语句来去除掉字段中空格字符的方法
mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数. ...
- 通信录分组并且分组标签悬停划入划出(包含错误信息及修改)--第三方开源--PinnedSectionListView
PinnedSectionListView在github上的链接地址是:https://github.com/beworker/pinned-section-listview . 下载下来后直接将Pi ...
- Linux&UNIX上卸载GoldenGate的方法
1. Log on to the database server (as oracle) where the GoldenGate software is installed. [root@oracl ...
- Oracle使用%type类型的变量输出结果
使用%type关键字可以声明一个与指定列名称相同的数据类型,他通常紧跟在指定列名的后面. 使用%type的2个好处: 1.用户不必查看表中各个列的数据类型,就可以确保所定义的变量能够存储检索的数据. ...
- DBus通讯
linux下进程间通信的方式主要有Pipe(管道),FIFO(命名管道),信号,共享内存,消息队列,信号灯等,这些方式各有 各得特点,如管道是linux下命令行中常用的,用于父子进程的通信.但是这些通 ...
- css 动画效果
要搞就搞明白,一知半解时停止研究 损失最大 css3意义: CSS3 动画 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. 重点 ...
- 用例图 UseCase Diagram
从上面的用例图模型,我们可以大致了解用例图所描述的是什么.下面进行详细介绍. 用例图,即用来描述什么角色通过某某系统能做什么事情的图,用例图关注的是系统的外在表现,系统与人的交互,系统与其它系统的交互 ...
- Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...
- C#基础原理拾遗——面试都爱问的委托和事件(纠正)
这篇博客是我昨天写的,文中的观点有些问题,后经过网友留言和个人学习发现错误,原文还是保留,更改补在后面,不怕贻笑大方,唯恐误人子弟.不知道还能不能放在首页,让被误导的同学再被反误导一次. 一.原文 几 ...
- easyui页面布局
html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...