wxpython动态实时绘图_wxPython 画图板

终于开始Python学习之旅了,姑且以一个“画图板”小项目开始吧。放慢脚步,一点一点地学习。

1月28日更新

第一次遇到的麻烦便是“重绘”,查了好多资料,终于重绘成功了。

#-*- encoding: gbk -*

importwx"""this version use class 'PaintDC' and 'ClientDC'"""

classMainFrame(wx.Frame):def __init__(self):

wx.Frame.__init__(self, None, -1, "画图板 - 芒果布丁", (0, 0), (800, 500))

self.Center(wx.BOTH)#窗口居中显示

self.x1, self.x2, self.y1, self.y2 =0, 0, 0, 0

self.st= 'line'self.pos=(0,0)

self.pen= wx.Pen("green", 1, wx.SOLID)

self.brush= wx.Brush('', wx.TRANSPARENT) #透明填充

self.shapes =[]

self.SetBackgroundColour("black")

self.b1= wx.Button(self, -1, label="矩形", pos=(10, 10), size=(50, 30))

self.b2= wx.Button(self, -1, label="圆形", pos=(10, 50), size=(50, 30))

self.b3= wx.Button(self, -1, label="直线", pos=(10, 90), size=(50, 30))

self.b1.SetDefault()

self.InitBuffer()

self.Bind(wx.EVT_BUTTON, self.ToRect, self.b1)

self.Bind(wx.EVT_BUTTON, self.ToOval, self.b2)

self.Bind(wx.EVT_BUTTON, self.ToLine, self.b3)

self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)

self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)

self.Bind(wx.EVT_PAINT, self.OnPaint)defInitBuffer(self):

size=self.GetClientSize()

self.buffer=wx.EmptyBitmap(size.width, size.height)

dc=wx.BufferedDC(None, self.buffer)

dc.SetPen(self.pen)

dc.SetBackground(wx.Brush(self.GetBackgroundColour()))

dc.SetBrush(self.brush)

dc.Clear()

self.Draw(dc)defToRect(self, event):

self.st= 'rect'

defToOval(self, event):

self.st= 'oval'

defToLine(self, event):

self.st= 'line'

defOnLeftDown(self, event):

self.p1=event.GetPositionTuple()

self.x1, self.y1=self.p1defOnLeftUp(self, event):

self.p2=event.GetPositionTuple()

self.shapes.append((self.st, self.p1+self.p2))

dc=wx.ClientDC(self)

self.Draw(dc)defOnPaint(self, event):

dc= wx.PaintDC(self) #处理一个paint(描绘)请求

self.Draw(dc)defDraw(self, dc):

dc.SetPen(self.pen)

dc.SetBackground(wx.Brush(self.GetBackgroundColour()))

dc.SetBrush(self.brush)

dc.Clear()for st,(x1,y1,x2,y2) inself.shapes:if st == 'line':

dc.DrawLine(x1, y1, x2, y2)elif st == 'oval':

dc.DrawEllipse(x1, y1, x2-x1, y2-y1)elif st == 'rect':

dc.DrawRectangle(x1, y1, x2-x1, y2-y1)if __name__ =='__main__':

app=wx.PySimpleApp()

frame=MainFrame()

frame.Show()

app.MainLoop()

画图板 version1

#-*- encoding: gbk -*

importwx"""this version use class 'BufferedPaintDC' and 'BufferedDC'"""

classMainFrame(wx.Frame):def __init__(self):

wx.Frame.__init__(self, None, -1, "画图板 - 芒果布丁", (0, 0), (800, 500))

self.Center(wx.BOTH)#窗口居中显示

self.x1, self.x2, self.y1, self.y2 =0, 0, 0, 0

self.st= 'line'self.pos=(0,0)

self.pen= wx.Pen("green", 1, wx.SOLID)

self.brush= wx.Brush('', wx.TRANSPARENT) #透明填充

self.shapes =[]

self.InitBuffer()

self.SetBackgroundColour("black")

self.b1= wx.Button(self, -1, label

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值