Устранить ненужный рисунок изображения при использовании постоянного тока? - PullRequest
1 голос
/ 06 мая 2011

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

1) Я проектирую простой графический интерфейс, который содержит один кадр и одну панель. Допустим, у меня есть два изображения, которые я рисую на панели, используя dc. Одно изображение будет непрерывно появляться и исчезать (по таймеру), а второе является стационарным (не изменяется). Выцветание достигается путем изменения непрозрачности изображения и использования dc.Clear () перед перерисовкой новой версии изображения.

Мой вопрос таков: как бы я нарисовал изображение с постепенным исчезновением / растяжением, не затрагивая второе изображение, которое не изменяется? Кажется, что это вызывает ненужный рисунок, поскольку неподвижное изображение будет перерисовываться вместе с исчезающим изображением. Могу ли я выборочно очистить только первое изображение, не затрагивая второе? Это моя функция рисования:

def on_paint(self, event):
    dc = wx.PaintDC(self)
    dc = wx.BufferedDC(dc)

    brush = wx.Brush('#3B3B3B')
    dc.SetBackground(brush)
    dc.Clear()

    # Draw the first image (stationary)
    dc.DrawBitmap(stationaryBitmap, 120, 0, True)

    # Draw the second image (fading)
    image = self.image.AdjustChannels(1, 1, 1, self.factoralpha)
    fadingBitmap = wx.BitmapFromImage(image)
    dc.DrawBitmap(fadingBitmap, 120, 0, True)

2) Как связать событие с объектом wx.Image? Я хотел бы иметь возможность щелкнуть на исчезающем изображении, хотя я не могу назначить ему идентификатор. Цель состоит в том, чтобы связать событие, подобное тому, что я мог сделать с wx.StaticBitmap.

self.image = wx.Image("C:\image.png", wx.BITMAP_TYPE_PNG)

# Trying to bind an event, but no ID is assigned
self.Bind(wx.EVT_BUTTON, self.go_button, id=self.image.GetId())

3) Можно ли разместить wx.DrawBitmap в классификаторе? Похоже, что требуется только пара координат x, y.

dc.DrawBitmap(bitmap, 120, 0, True)

Спасибо всем.

1 Ответ

0 голосов
/ 06 мая 2011

1) Для исполнения я бы порекомендовал использовать MemoryDC и обновлять чертеж только в случае необходимости. Смотрите здесь: BufferedCanvas . Возможно, вы захотите использовать более 2 буферов, потому что вы используете 2 изображения (см. Пример).

2) Я не знаю об этом, но пытались ли вы сделать привязку к панели и затемнить или ослабить панель? Вы можете непосредственно рисовать на WX.Panel.

Привет

...