Привет, evryone :) Я хотел бы зафиксировать событие нажатия в синей рамке, нарисованной внутри wx.Panel
Я уже знаю, как реагировать на нажатие кнопки:
myButton.Bind(wx.EVT_BUTTON, myHandler)
или
myFrame.Bind(wx.EVT_BUTTON, myHandler, myFrame.myConcernedButton)
Но как мне быть, если я хочу
- Нарисовать синий квадрат на панели, что, к счастью, я уже могу сделать.
- ЗахватEVT_BUTTON только на синий квадрат, а не на всю панель?
Я думаю, мне следует создать новый класс для моего SquareBox, но:
- Какой класс должен это делатьбыть производным от?
- Итак, как добавить обработку событий в этот класс?
Большое спасибо.
PS: За небольшую историю,Я занимался разработкой на Java и SWING
Редактировать:
Как мне советовал Майк Дрисколл, я пытался решить мою проблему с помощью PlateButton.Но, к сожалению, мне не удалось придать кнопке нужный размер или нужный стиль (при нажатии она меняет цвет, и я не хочу этого).Кроме того, он вообще не реагирует на событие EVT_BUTTON.
Это моя попытка, заранее спасибо:
import wx
from wx.lib.platebtn import PlateButton
class Square(PlateButton):
def __init__(self, parent, size, pos):
PlateButton.__init__(self, parent, size = size, pos = pos)
self.SetBackgroundColour(wx.Colour(0,0,255))
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Reactive square application",
size = (300,200))
panel = wx.Panel(self, wx.ID_ANY)
square1 = Square(panel, size=(60,60), pos=(80,50))
square2 = Square(panel, size=(60,60), pos=(80,120))
square1.Bind(wx.EVT_BUTTON, self.OnSquareClick)
def OnSquareClick(self, event):
dialog = wx.MessageDialog(self, "You clicked on square !!!",
"Hit has been done", wx.OK)
dialog.Show(True)
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MainFrame()
frame.Show(True)
app.MainLoop()