Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

wxpython - problem z rysowanie

34 views
Skip to first unread message

Tomek

unread,
May 29, 2005, 4:15:07 PM5/29/05
to
witam!
dlaczego to co poniżej nie rysuje ani linii (DrawLine) ani prostokątu
(DrawRectangle). Mam tylko białe tło i tyle. Kombinuję, szukam ale nic :(
Poniżej pełne źródło (modyfikacja przykładu z
http://wiki.wxpython.org/index.cgi/WxHowtoDrawing):

from wxPython.wx import *

class ChartFrame(wxFrame):
def __init__(self, parent):
wxFrame.__init__(self, parent, -1, "Wykres", size=(800,600),
style=wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
chart = ChartWindow(self, -1)

class ChartWindow(wxWindow):
def __init__(self, parent, ID):
wxWindow.__init__(self, parent, ID, style=wxNO_FULL_REPAINT_ON_RESIZE)
self.SetBackgroundColour("WHITE")
self.thickness = 1
self.InitBuffer()

def InitBuffer(self):
size = self.GetClientSize()
self.buffer = wxEmptyBitmap(size.width, size.height)
dc = wxBufferedDC(wxClientDC(self), self.buffer)
dc.SetBackground(wxBrush(self.GetBackgroundColour()))
dc.Clear()
dc.BeginDrawing()
dc.SetPen(wxPen(wxNamedColour("BLACK"), 10, wxSOLID))
dc.DrawRectangle(5, 5, 10, 20)
dc.DrawLine(0, 0, 1000, 1000)
dc.EndDrawing()


app = wxPySimpleApp()
chart = ChartFrame(None)
chart.Show(1)
app.MainLoop()

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Krzysztof kaczkowski

unread,
May 29, 2005, 6:21:01 PM5/29/05
to
Wszystko gra, tylko powiedz gdzie updatujesz główne DC?


from wxPython.wx import *

class ChartFrame(wxFrame):
def __init__(self, parent):
wxFrame.__init__(self, parent, -1, "Wykres", size=(800,600),
style=wxDEFAULT_FRAME_STYLE |
wxNO_FULL_REPAINT_ON_RESIZE)

self.chart = ChartWindow(self, -1)

class ChartWindow(wxWindow):
def __init__(self, parent, ID):
wxWindow.__init__(self, parent, ID,
style=wxNO_FULL_REPAINT_ON_RESIZE)

EVT_PAINT(self, self.OnPaint)
EVT_SIZE(self, self.OnSize)

def InitBuffer(self):
self.SetBackgroundColour("WHITE")


size = self.GetClientSize()
self.buffer = wxEmptyBitmap(size.width, size.height)
dc = wxBufferedDC(wxClientDC(self), self.buffer)

dc.BeginDrawing()
dc.SetBackground(wxBrush(self.GetBackgroundColour()))
dc.Clear()
dc.SetPen(wxPen(wxNamedColour("BLACK"), 5, wxSOLID))
dc.DrawRectangle(5, 5, 100, 100)
dc.DrawLine(0, 0, size.width, size.height)
dc.EndDrawing()

def OnPaint(self, event):
dc = wxBufferedPaintDC(self, self.buffer)

def OnSize(self, event):
self.InitBuffer()

tomek(int)

unread,
May 30, 2005, 3:02:19 AM5/30/05
to
On 5/30/2005 12:21 AM, Krzysztof kaczkowski wrote:
> Wszystko gra, tylko powiedz gdzie updatujesz główne DC?

dzięki Ci wielkie :) fakt: brakowało obsługi tych dwóch zdarzeń. Już
mnie wczoraj trafiało, bo nie wiedziałem co się dzieje :)

pozdrawiam
tomek

w.p.

unread,
May 30, 2005, 3:20:00 AM5/30/05
to Tomek
Tomek wrote:
> witam!
> dlaczego to co poniżej nie rysuje ani linii (DrawLine) ani prostokątu
> (DrawRectangle). Mam tylko białe tło i tyle. Kombinuję, szukam ale nic :(
> Poniżej pełne źródło (modyfikacja przykładu z
> http://wiki.wxpython.org/index.cgi/WxHowtoDrawing):
>
Nie miales rysowania wg. mnie. Tylko inicjalnie cos "rysowales"...
Trzeba zrobic obsluge rysowania i wylaczyc odrysowywanie tla - jakos tak

from wxPython.wx import *

class ChartFrame(wxFrame):
def __init__(self, parent):
wxFrame.__init__(self, parent, -1, "Wykres", size=(800,600),
style=wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
chart = ChartWindow(self, -1)

class ChartWindow(wxWindow):
def __init__(self, parent, ID):
wxWindow.__init__(self, parent, ID, style=wxNO_FULL_REPAINT_ON_RESIZE)
self.SetBackgroundColour("WHITE")
self.thickness = 1

EVT_PAINT(self,self.OnPaint)
EVT_ERASE_BACKGROUND(self,self.OnEraseBack)


def OnPaint(self, event):


size = self.GetClientSize()
self.buffer = wxEmptyBitmap(size.width, size.height)
dc = wxBufferedDC(wxClientDC(self), self.buffer)
dc.SetBackground(wxBrush(self.GetBackgroundColour()))
dc.Clear()
dc.BeginDrawing()
dc.SetPen(wxPen(wxNamedColour("BLACK"), 10, wxSOLID))
dc.DrawRectangle(5, 5, 10, 20)
dc.DrawLine(0, 0, 1000, 1000)
dc.EndDrawing()

event.Skip()

def OnEraseBack(self, event):
return 0 #?

app = wxPySimpleApp()
chart = ChartFrame(None)
chart.Show(1)
app.MainLoop()


--
"Lis wprędce przeto zaniechał daremnych podskoków
I rzekł: 'Kwaśne, zielone, dobre dla żarłoków.'"
Jean de La Fontaine

0 new messages