wxpython 中 用滑鼠拖動控制項 總結

2022-06-22 02:36:13 字數 1578 閱讀 7815

#

encoding: utf-8

import

wximport

osimport

noname

class

frame( noname.myframe1 ):

def__init__

(self,parent):

noname.myframe1.

__init__

(self,parent)

self.curbitmap =none

self.curpointerpos =none

defm_createbitmap_buttononbuttonclick ( self,event ):

event.skip()

defm_bitmap1onleftdown ( self,event ):

self.curpointerpos =event.getposition()

event.skip()

defm_bitmap1onmotion ( self,event ):

if event.dragging() and

event.leftisdown() :

pos = event.getposition() -self.curpointerpos

statusval = '

x = %d y = %d

self.m_statusbar1.setstatustext(statusval)

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() 後都傳遞給父控制項。下面鏈結有解答。

2,一開始是監聽panel的wx.evt_motion,但是滑鼠一放到staticbitmap上,panel就監聽不到這個事件了。上面鏈結提到了

wx.postevent(staticbitmap(被拖動控制項).getparent(),event),本來想把事件post給panel,這樣panel來計算滑鼠偏移,這樣更準確,不會有閃爍的情況。但是post成功了,但是panel裡面觸發了這個事件,但是event.getposition() 依然是相對staticbitmap(被拖動控制項)的,而不是相對panel(父控制項)的,雖然事件觸發了。

SL滑鼠拖動

實現滑鼠down up 和move 事件可以在布局面板中使用滑鼠拖動或移動巢狀在border控制項中的影象或物件。xaml canvas x name layoutroot background white border x name border1 canvas.top 100 canvas.le...

javascript 滑鼠拖動

因為滑鼠沒有拖動事件 按下滑鼠並移動 只有按下,抬起,移動。記得在之前的乙個 拖動層 的隨筆中,我實現拖動,是用的乙個布林變數,判斷是否可以拖動某元素。這兩天看了一些東西,發現不需要設這個布林變數 實現過程 按下滑鼠的時候,給文件物件 當然也可以是別的dom物件 的移動事件繫結乙個處理函式,同時也給...

JavaScript滑鼠拖動

下面先看乙個有bug的版本,就是滑鼠移動太快後方塊會跟不上滑鼠的移動,然後滑鼠就離開了方塊區域,而事件都是繫結在方塊 div 上的,所以當滑鼠離開方塊後方塊就停了下來,當滑鼠 無論是否鬆開滑鼠左鍵 回到方塊區域方塊又會跟著滑鼠移動。出現這種問題的原因是 系統監聽滑鼠移動的頻次小於滑鼠移動的頻次。解決...