Проблема при использовании MemoryDC

1

Почему мой код печатает строки серого вместо черного?

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()
Теги:
graphics
wxpython

2 ответа

1
Лучший ответ

Помимо проблемы с краской/панелью краски уже указано, что проблема цвета связана с альфа-каналом 32-битного растрового изображения.

Я помню, что прочитал, чтобы использовать wx.GCDC вместо wx.DC.

0

Хорошо, я тестировал новую версию wx (2.8.9.2)

и теперь я удивляюсь, почему он даже работает на вашей стороне. вы пытаетесь нарисовать панель, но переопределяя событие рисования кадра

вместо этого сделайте это

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

и все будет хорошо

  • 0
    Звучало разумно, но я попробовал, и линии все еще выглядят серыми. Я изменил self.Bind(wx.EVT_PAINT, self.on_paint) на self.panel.Bind(wx.EVT_PAINT, self.on_paint) . Я использую 2.8.9.2, а также на Python 2.6 на Windows XP
  • 0
    прямо еще серый ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню