Probleme mit dem Device Context

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Bluecaspar
User
Beiträge: 27
Registriert: Samstag 18. März 2006, 20:06

Donnerstag 5. Oktober 2006, 15:41

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()
    
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Mittwoch 11. Oktober 2006, 08:30

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() 
Antworten