Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython-使用DC绘制未填充的矩形_Python_User Interface_Wxpython - Fatal编程技术网

wxPython-使用DC绘制未填充的矩形

wxPython-使用DC绘制未填充的矩形,python,user-interface,wxpython,Python,User Interface,Wxpython,这是我在绘制一个50x50、没有边框的灰色框时的最佳尝试。但是,将画笔宽度设置为0似乎没有任何效果,设置画笔只能将填充从纯白色更改为纯黑色 如果这是问题的一部分,请将其放在面板的上下文中: dc.SetPen(wx.Pen(wx.BLACK, 0)) dc.SetBrush(wx.Brush("C0C0C0")) dc.DrawRectangle(50,50,50,50) 这将生成一个灰色矩形: class DrawRect(wx.Panel): def __init__(self,

这是我在绘制一个50x50、没有边框的灰色框时的最佳尝试。但是,将画笔宽度设置为0似乎没有任何效果,设置画笔只能将填充从纯白色更改为纯黑色

如果这是问题的一部分,请将其放在面板的上下文中:

dc.SetPen(wx.Pen(wx.BLACK, 0))
dc.SetBrush(wx.Brush("C0C0C0"))
dc.DrawRectangle(50,50,50,50)

这将生成一个灰色矩形:

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)

为了绘制一个非填充矩形,您需要在画笔进行填充和画笔绘制轮廓时将画笔设置为透明。下面的示例在红色填充矩形旁边绘制了一个蓝色非填充矩形

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

小提示:对于较小的代码,您可以使用dc.SetPen(wx.TRANSPARENT_-PEN),而无需删除dc。事实上,最好不要将其存储为类属性。“wx.DC.BeginDrawing和EndDrawing已被弃用…”自2006年10月18日以来
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()