代码之家  ›  专栏  ›  技术社区  ›  Daniel R. Livingston

使用wx.PaintDC持久绘制+临时覆盖

  •  0
  • Daniel R. Livingston  · 技术社区  · 7 年前

    wx.PaintDC .

    也就是说,一个半径为一定的圆跟随鼠标在屏幕周围移动,但只有当按住鼠标左键时,圆才会“永久”绘制到缓冲区上。

    PaintDC 实例中,无论鼠标是否落下,(2)跟随鼠标四处移动,但决不要持续地在 油漆DC 实例,或(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()
    
    1 回复  |  直到 7 年前