Устранить ненужный рисунок изображения при использовании постоянного тока?

1

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

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 в sizer? Похоже, что он принимает только координатную пару x, y.

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

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

Теги:
drawing
wxpython

1 ответ

0

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

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

Привет

Ещё вопросы

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