Zeichnen Sie einen Kreis mit wxpython
Hallo, ich bin zeichnen Sie einen Kreis mit wxpython für ein Projekt.Bitte schauen Sie durch den code und mir sagen was ich falsch mache, es ist nicht einmal zeigen keine Fehler, aber nicht zeichnen des Kreises entweder. Ich bin nur immer ein leeres Fenster.
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()
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehrere Probleme
Sie sind nicht verbindlich zu EVT_PAINT z.B.
selbst.Bind(wx.EVT_PAINT, selbst.OnPaint)
Zeichnen in OnPaint, aber wenn Sie wollen, ziehen Sie zuerst und dann die Wiederverwendung, die bitmap, gibt es keine Notwendigkeit BufferedPaintDC in onPaint
Zeichnen direkt auf Puffer mit wx.MemoryDC
Erstellen Sie ein panel im Fenster, in dem decken, was Sie die Zeichnung im Fenster so zu entfernen, dass
Sind Sie initialisieren InitBuffer zu beginnen, wo die Größe nicht korrekt sein oder sehr weniger
Sie sollten tun, die in Größe oder rufen Sie in der onPaint-und überprüfen, ob die Größe hat sich verändert
also Kreis ist richtig gezeichnet in der Mitte des Fensters auf die Größe zu
Überschreiben EVT_ERASE_BACKGROUND, um flimmern zu vermeiden
hier ist der aktualisierte code
Die wxPython-demo ist eine großartige Ressource für Dinge wie diese. Zum Beispiel, schauen Sie sich die demo unter Sonstiges -> DrawXXXList. Dieses zeigt, wie zu zeichnen eine ganze Reihe von Ellipsen in einem Fenster.