1
我正在使用wxpython來做一些圖像處理工作。我想用鼠標左鍵畫出一個點,並用鼠標移動來移動繪製的點。wxpython用鼠標移動繪製點
以下是我的代碼。當左鍵點擊時畫點沒問題,但是當我移動鼠標時,先前繪製的點也顯示出不符合我的期望的點。
如何隱藏前一點當我移動鼠標,使它看起來像我移動點?
# -*- coding: utf-8 -*-
import wx
class MyFrame(wx.Frame):
isLeftDown = False
def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, size=wx.Size(500, 500))
bSizer1 = wx.BoxSizer(wx.VERTICAL)
self.m_panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition,
wx.DefaultSize, wx.TAB_TRAVERSAL)
bSizer1.Add(self.m_panel, 3, wx.EXPAND | wx.ALL, 5)
bmp = wx.EmptyBitmap(500, 500)
self.staticBMP = wx.StaticBitmap(self.m_panel, wx.ID_ANY, bmp)
self.SetSizer(bSizer1)
# bind event
self.staticBMP.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
self.staticBMP.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
self.staticBMP.Bind(wx.EVT_MOTION, self.OnMove)
def OnLeftDown(self, event):
pos = event.GetPositionTuple()
dc = wx.ClientDC(self.staticBMP)
dc.DrawCircle(pos[0], pos[1], 5)
self.isLeftDown = True
def OnLeftUp(self, event):
self.isLeftDown = False
def OnMove(self, event):
if self.isLeftDown:
pos = event.GetPositionTuple()
dc = wx.ClientDC(self.staticBMP)
dc.DrawCircle(pos[0], pos[1], 3)
if __name__ == '__main__':
app = wx.App()
frame = MyFrame(None)
frame.Show(True)
app.MainLoop()
謝謝你的回答。是的,我想要移動現有的點。您的答案是使用計時器事件並在框架上繪圖。當我使用鼠標移動事件並在StaticBitmap上繪圖時,可以嗎? – tidy
爲了上天的緣故。這是一個例子! –