2010-02-13 94 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。實際上,最好不要將它存儲爲類屬性。 – 2010-02-13 15:37:50

+1

「wx.DC.BeginDrawing和EndDrawing已被棄用...」自2006年10月18日以來 Barton 2013-09-09 08:33:35

+0

現在不起作用。仍然繪製一個填充矩形 – obayhan 2016-03-04 13:25:45

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