我正在尝试使用wxPython创建一个Microsoft Paint-esque应用程序。
目前,在鼠标左下事件期间,应用程序使用圆形画笔“绘制”到屏幕上。这很棒,也很理想。但是我还需要一个相同半径的圆来“跟随”鼠标,而不是持久地绘制到wx.PaintDC
上。
也就是说,鼠标在屏幕周围有一个半径的圆圈,但只有当按住鼠标左键时,圆圈才会“永久”地绘制在缓冲区上。
我采取的方法(1)在鼠标周围有一个圆圈,但不管鼠标向下都画在PaintDC
实例上,(2)跟随鼠标但是永远不会画在PaintDC
实例,或者(3)不要跟随鼠标,但是在左键下方显示并持续绘制(参见下面的示例)。
谢谢!
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.draw = False
self.radius = 50
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_MOTION, self.Draw)
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
def OnPaint(self, event):
dc = wx.PaintDC(self)
def Draw(self, event):
if self.draw == True:
x = event.GetX()
y = event.GetY()
dc = wx.ClientDC(self)
pen = wx.Pen(wx.Colour(192,192,192,128), 2)
brush = wx.Brush(wx.Colour(192,192,192,128))
dc.SetPen(pen)
dc.SetBrush(brush)
dc.DrawCircle(x,y,self.radius)
def OnLeftDown(self, event):
self.draw = True
def OnLeftUp(self, event):
self.draw = False
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Test",style=wx.DEFAULT_FRAME_STYLE,size=wx.Size(400, 300))
self.main_panel = MyPanel(self)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
答案 0 :(得分:2)
有wx.Overlay
课做得很好,协助在更永久的东西上画临时的东西。请参阅演示中的叠加示例:https://github.com/wxWidgets/Phoenix/blob/master/demo/Overlay.py