Я новичок в wxPython. У меня есть две функции, которые создают разные графические представления (в этом примере это упрощенно как DrawRect1 и DrawRect2). Я хочу использовать меню для переключения между этими двумя видами.
Большинство примеров, которые я видел, связывают EVT_PAINT с единственной функцией OnPaint, но я не понимаю, как определить несколько функций рисования, которые можно связать с опциями меню.
В приведенном ниже коде я нарисовал нужный прямоугольник, но цвет фона не отображается, и я не получил ошибку.
Я использую ClientDC, а не PaintDC, поскольку я понял, что именно так функции могут выводить на экран, а не как одну функцию с привязанным к ней EVT_PAINT.
Мой подход в коде неправильный? Или это просто проблема с обновлением дисплея? Я пытаюсь очистить панель (воссоздав ее), а затем рисую на ней (которая не работает, поскольку цвет фона не отображается).
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title=title, size=(500, 300))
self.InitUI()
def InitUI(self):
self.panel = wx.Panel(self)
self.panel.SetBackgroundColour(wx.Colour('RED'))
self.Centre()
self.Show(True)
menuBar = wx.MenuBar()
RectangleButton = wx.Menu()
Item1 = RectangleButton.Append(wx.ID_ANY, 'Rectangle 1')
Item2 = RectangleButton.Append(wx.ID_ANY, 'Rectangle 2')
menuBar.Append(RectangleButton, 'Rectangles')
self.SetMenuBar(menuBar)
self.Bind(wx.EVT_MENU, self.DrawRect1, Item1)
self.Bind(wx.EVT_MENU, self.DrawRect2, Item2)
def DrawRect1(self, e):
self.panel.Destroy()
self.panel = wx.Panel(self, size=self.GetClientSize())
self.dc = wx.ClientDC(self.panel)
self.panel.SetBackgroundColour(wx.Colour('BLUE'))
self.dc.DrawRectangle(10, 10, 100, 100)
def DrawRect2(self, e):
self.panel.Destroy()
self.panel = wx.Panel(self, size=self.GetClientSize())
self.dc = wx.ClientDC(self.panel)
self.panel.SetBackgroundColour(wx.Colour('GREEN'))
self.dc.DrawRectangle(20, 20, 50, 50)
myApp = wx.App()
Mywin(None,'Drawing demo')
myApp.MainLoop()