Python 使用MemoryDC时出现问题

Python 使用MemoryDC时出现问题,python,graphics,wxpython,Python,Graphics,Wxpython,为什么我的代码将线条打印为灰色而不是黑色 import wx class MyFrame(wx.Frame): def __init__(self,*args,**kwargs): wx.Frame.__init__(self,*args,**kwargs) self.panel=wx.Panel(self,-1,size=(1000,1000)) self.Bind(wx.EVT_PAINT, self.on_paint)

为什么我的代码将线条打印为灰色而不是黑色

import wx

class MyFrame(wx.Frame):
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        self.panel=wx.Panel(self,-1,size=(1000,1000))
        self.Bind(wx.EVT_PAINT, self.on_paint)
        self.Bind(wx.EVT_SIZE, self.on_size)

        self.bitmap=wx.EmptyBitmapRGBA(1000,1000,255,255,255,255)

        dc=wx.MemoryDC()
        dc.SelectObject(self.bitmap)
        dc.SetPen(wx.Pen(wx.NamedColor("black"),10,wx.SOLID))
        dc.DrawCircle(0,0,30)
        dc.DrawLine(40,40,70,70)
        dc.Destroy()

        self.Show()

    def on_size(self,e=None):
        self.Refresh()

    def on_paint(self,e=None):
        dc=wx.PaintDC(self.panel)
        dc.DrawBitmap(self.bitmap,0,0)
        dc.Destroy()

if __name__=="__main__":
    app=wx.PySimpleApp()
    my_frame=MyFrame(parent=None,id=-1)
    app.MainLoop()

好的,我使用更新版本的wx(2.8.9.2)进行了测试

现在我想知道为什么它会在你这边起作用。 您正在尝试绘制面板,但覆盖了框架的绘制事件

而是这样做

self.panel.Bind(wx.EVT_PAINT, self.on_paint)

一切都会好的

好的,我用更新版本的wx(2.8.9.2)进行了测试

现在我想知道为什么它会在你这边起作用。 您正在尝试绘制面板,但覆盖了框架的绘制事件

而是这样做

self.panel.Bind(wx.EVT_PAINT, self.on_paint)

所有的一切都会好起来的

除了框架/面板的油漆问题已经指出,颜色问题是由于32位位图的alpha通道造成的


我记得我读过使用
wx.GCDC
而不是
wx.DC

旁边的框架/面板绘制问题,已经指出颜色问题是由于32位位图的alpha通道造成的


我记得我读过书,用
wx.GCDC
代替
wx.DC

听起来很合理,但我试过了,结果还是显示出灰色。我将
self.Bind(wx.EVT_-PAINT,self.on-PAINT)
更改为
self.panel.Bind(wx.EVT_-PAINT,self.on-PAINT)
。我也在使用2.8.9.2,在Python2.6和Windows XP上,这听起来很合理,但我尝试了一下,结果还是显示为灰色。我将
self.Bind(wx.EVT_-PAINT,self.on-PAINT)
更改为
self.panel.Bind(wx.EVT_-PAINT,self.on-PAINT)
。我在WindowsXP的Python2.6上也使用了2.8.9.2