我如何填充形状由线组成并填充(wxpython)

时间:2014-05-19 12:29:53

标签: wxpython

我是wxpython的新手。我想绘制一个自定义形状,完成后,形状可以填充任何或选定的颜色(SetBrush)。

任何人都可以帮我解释示例代码。它们只画了5行,但我不能填充这个形状或任何其他自定义形状的颜色。

1 个答案:

答案 0 :(得分:0)

你是对的,SetBrush是做到这一点的关键。你画线时是否使用过DrawLines?如果是这样,您可以使用DrawPolygon。这将关闭多边形并用刷子颜色填充内部。笔颜色用于轮廓。这是我在Windows上用wxpython 2.8编写和测试的最小例子。

SetDoubleBuffered在这里可能并不重要,但这是我的默认设置,以防止闪烁。

您可以在the documentation for wx.DC中找到许多其他有用的绘图方法。

import wx

class myframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, title='Test', size=(200,200))
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.SetDoubleBuffered(True)
        self.Show()

    def OnPaint(self, event):

        dc = wx.BufferedPaintDC(self)
        dc.Clear()

        dc.BeginDrawing()

        dc.SetBrush(wx.Brush(wx.RED, wx.SOLID))
        # dc.SetBrush(wx.Brush(wx.RED, wx.TRANSPARENT)) # when you dont want to fill

        dc.SetPen(wx.Pen(wx.NamedColour('cyan'), 1))

        #dc.DrawLines([(100,100), (120,100), (120,120), (100,120)]) # without fill, open end
        dc.DrawPolygon([(100,100), (120,100), (120,120), (100,120)])  # closed, filled

        dc.EndDrawing()

if __name__ == '__main__':

    app = wx.PySimpleApp(0)
    frame = myframe()
    app.MainLoop()