Seite 1 von 1

Probleme mit dem Device Context

Verfasst: Donnerstag 5. Oktober 2006, 15:41
von Bluecaspar
Hallo ich möchte ein Device Context global verwenden können, so wie ichs gemacht hab wird aber gar nichts gezeichnet. Ausserdem möcht ich auch durch nen MausEvent zeichnen können, und da tut sich auch nichts. Kannmir jemand sagen was ich verkehrt mache?

Code: Alles auswählen

#!/bin/env python
import wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Gimp Basics', size=(300, 300))
        
        self.dc = wx.PaintDC(self)
        
        wx.EVT_PAINT(self, self.OnPaint)
        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
        
    def OnPaint(self, event=None):
        self.dc.BeginDrawing()
        self.dc.SetBackground( wx.Brush("White") )
        self.dc.EndDrawing()
        
    def OnMouseDown(self,event):
        self.dc.BeginDrawing()
        self.dc.SetPen(wx.Pen("BLACK", 1))
        self.dc.DrawLabel('We can do it',(40,40,20,20))
        self.dc.EndDrawing()
        
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()
    

Re: Probleme mit dem Device Context

Verfasst: Mittwoch 11. Oktober 2006, 08:30
von Francesco
Hallo, ein Paintevent kann man nicht selber erzeugen, man muss refresh
aufrufen, um eines zu generieren.

Habe testhalber eine Variable, self.ShouldPaint, die verhindert
oder sicherstellt, dass nur beim Mausklick neu gezeichnet wird.

Code: Alles auswählen

#!/bin/env python
import wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Gimp Basics', size=(300, 300))
        self.ShouldPaint = False
        
        self.Bind (wx.EVT_PAINT, self.OnPaint)
        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown)
       
    def OnPaint(self, event=None):
        dc = wx.PaintDC(self)
        if self.ShouldPaint:
            #print "update"
            dc.BeginDrawing()
            dc.SetBackground( wx.Brush("White") )
            dc.SetPen(wx.Pen("BLACK", 1))
            dc.DrawLabel('We can do it',(40,40,20,20))
            dc.EndDrawing()
        self.ShouldPaint = False
       
    def OnMouseDown(self,event):
        self.ShouldPaint = True
        self.Refresh()
        event.Skip()
       
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()