2010-02-13 3 views
2
dc.SetPen(wx.Pen(wx.BLACK, 0)) 
dc.SetBrush(wx.Brush("C0C0C0")) 
dc.DrawRectangle(50,50,50,50) 

테두리가없는 50x50 회색 상자를 그리는 것이 가장 좋습니다. 그러나 펜 너비를 0으로 설정하면 아무 것도 수행하지 못하고 브러시를 설정하면 채우기가 순수한 흰색에서 순수한 검정으로 바뀝니다.wxPython - DC로 채워지지 않은 사각형 그리기

class DrawRect(wx.Panel): 
    def __init__(self,parent=None,id=-1,pos=(-1,-1),size=(-1,-1),style=0): 
     wx.Panel.__init__(self,parent,id,size,pos,style) 
     self.SetBackgroundColour("#D18B47") 
     self.Bind(wx.EVT_PAINT,self.onPaint) 

    def onPaint(self, event): 
     event.Skip() 
     dc = wx.PaintDC(event.GetEventObject()) 
     self.drawRect(dc) 

    def drawRect(self,dc): 
     dc.SetPen(wx.Pen("FFCE8A", 0)) 
     dc.SetBrush(wx.Brush("C0C0C0")) 
     dc.DrawRectangle(50,50,50,50) 

답변

3

이 회색 직사각형한다 :

찾는 경우에 문제의 부분, 패널의 문맥에있어

아닌 채워진 사각형을 그리 위해서는
import wx 

class MyPanel(wx.Panel): 
    """ class MyPanel creates a panel to draw on, inherits wx.Panel """ 
    def __init__(self, parent, id): 
     # create a panel 
     wx.Panel.__init__(self, parent, id) 
     self.SetBackgroundColour("white") 
     self.Bind(wx.EVT_PAINT, self.OnPaint) 

    def OnPaint(self, evt): 
     """set up the device context (DC) for painting""" 
     self.dc = wx.PaintDC(self) 
     self.dc.BeginDrawing() 
     self.dc.SetPen(wx.Pen("grey",style=wx.TRANSPARENT)) 
     self.dc.SetBrush(wx.Brush("grey", wx.SOLID)) 
     # set x, y, w, h for rectangle 
     self.dc.DrawRectangle(250,250,50, 50) 
     self.dc.EndDrawing() 
     del self.dc 

app = wx.PySimpleApp() 
# create a window/frame, no parent, -1 is default ID 
frame = wx.Frame(None, -1, "Drawing A Rectangle...", size = (500, 500)) 
# call the derived class, -1 is default ID 
MyPanel(frame,-1) 
# show the frame 
frame.Show(True) 
# start the event loop 
app.MainLoop() 
+6

작은 노트 : 더 작은 코드의 경우 dc.SetPen (wx.TRANSPARENT_PEN)을 수행 할 수 있으므로 DC를 삭제할 필요가 없습니다. 실제로 클래스 속성으로 저장하지 않는 것이 좋습니다. –

+1

2006 년 10 월 18 일 이후로 "wx.DC.BeginDrawing 및 EndDrawing이 사용되지 않습니다 ..." Barton

+0

이제 작동하지 않습니다. 채워진 사각형을 칠한다. – obayhan

1

브러시가 채우기를 수행하고 펜이 외곽선을 그리면 브러시를 투명하게 설정해야합니다. 아래 예제는 빨간색 채워진 사각형과 함께 파란색 채워지지 않은 사각형을 그립니다.

import wx 

class MyPanel(wx.Panel): 
    """ class MyPanel creates a panel to draw on, inherits wx.Panel """ 

    def __init__(self, parent, id): 
     wx.Panel.__init__(self, parent, id) 

     self.SetBackgroundColour("white") 
     self.Bind(wx.EVT_PAINT, self.OnPaint) 

    def OnPaint(self, event): 
     """set up the device context (DC) for painting""" 
     dc = wx.PaintDC(self) 

     #blue non-filled rectangle 
     dc.SetPen(wx.Pen("blue")) 
     dc.SetBrush(wx.Brush("blue", wx.TRANSPARENT)) #set brush transparent for non-filled rectangle 
     dc.DrawRectangle(10,10,200,200) 

     #red filled rectangle 
     dc.SetPen(wx.Pen("red")) 
     dc.SetBrush(wx.Brush("red")) 
     dc.DrawRectangle(220,10,200,200) 

app = wx.App() 
frame = wx.Frame(None, -1, "Drawing A Rectangle...", size=(460, 300)) 
MyPanel(frame,-1) 
frame.Show()   
frame.Centre() 
app.MainLoop() 
관련 문제