使用wxpython绘制圆
嗨,我正在用wxpython为一个项目画一个圆圈。请检查代码,告诉我我做错了什么。它甚至没有显示任何错误,但也没有画圆圈。我只是得到一个空白窗口使用wxpython绘制圆,wxpython,Wxpython,嗨,我正在用wxpython为一个项目画一个圆圈。请检查代码,告诉我我做错了什么。它甚至没有显示任何错误,但也没有画圆圈。我只是得到一个空白窗口 import wx class SketchFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1, "Sketch Frame",size=(350,350)) self.sketch = SketchW
import wx
class SketchFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "Sketch Frame",size=(350,350))
self.sketch = SketchWindow(self, -1)
class SketchWindow(wx.Window):
def __init__ (self, parent,ID):
wx.Window.__init__(self, parent, ID)
self.panel =wx.Panel(self, size= (350,350))
self.InitBuffer()
def InitBuffer(self):
size=self.GetClientSize()
self.Buffer=wx.EmptyBitmap(size.width,size.height)
dc=wx.BufferedDC(None,self.Buffer)
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
dc.Clear()
self.Drawcircle(dc)
self.reInitBuffer=False
def Drawcircle(self,dc):
pen=wx.Pen('blue',4)
dc.SetPen(pen)
dc.DrawCircle(100,100,50)
def OnPaint(self, event):
dc = wx.BufferedPaintDC(self, self.buffer)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=SketchFrame(None)
frame.Show(True)
app.MainLoop()
谢谢多个问题
import wx
class SketchFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "Sketch Frame",size=(350,350))
self.sketch = SketchWindow(self, -1)
class SketchWindow(wx.Window):
def __init__ (self, parent,ID):
wx.Window.__init__(self, parent, ID)
self.Buffer = None
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)
def InitBuffer(self):
size=self.GetClientSize()
# if buffer exists and size hasn't changed do nothing
if self.Buffer is not None and self.Buffer.GetWidth() == size.width and self.Buffer.GetHeight() == size.height:
return False
self.Buffer=wx.EmptyBitmap(size.width,size.height)
dc=wx.MemoryDC()
dc.SelectObject(self.Buffer)
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
dc.Clear()
self.Drawcircle(dc)
dc.SelectObject(wx.NullBitmap)
return True
def Drawcircle(self,dc):
size=self.GetClientSize()
pen=wx.Pen('blue',4)
dc.SetPen(pen)
dc.DrawCircle(size.width/2,size.height/2,50)
def OnEraseBack(self, event):
pass # do nothing to avoid flicker
def OnPaint(self, event):
if self.InitBuffer():
self.Refresh() # buffer changed paint in next event, this paint event may be old
return
dc = wx.PaintDC(self)
dc.DrawBitmap(self.Buffer, 0, 0)
self.Drawcircle(dc)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=SketchFrame(None)
frame.Show(True)
app.MainLoop()
wxPython演示是一个很好的资源。例如,在Miscellaneous->DrawXXXList下查看演示。这一个演示了如何在窗口中绘制一大堆椭圆。谢谢,是的,我将查看演示!