У меня есть три вопроса, на которые я действительно могу помочь. Надеюсь, я не прошу слишком многого.
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)
Спасибо всем.
1) Для производительности я бы рекомендовал использовать MemoryDC и обновлять чертеж, только это необходимо. См. Здесь: BufferedCanvas. Вы можете использовать более двух буферов, потому что вы используете 2 изображения (см. Пример).
2) Я не знаю об этом, но попытались ли вы привязать панель к панели и угасить панель в/из? Вы можете непосредственно рисовать на wx.Panel.
Привет