wxPython: EVT_BUTTON на части панели - PullRequest
0 голосов
/ 06 октября 2011

Привет, evryone :) Я хотел бы зафиксировать событие нажатия в синей рамке, нарисованной внутри wx.Panel

Я уже знаю, как реагировать на нажатие кнопки:

myButton.Bind(wx.EVT_BUTTON, myHandler)

или

myFrame.Bind(wx.EVT_BUTTON, myHandler, myFrame.myConcernedButton)

Но как мне быть, если я хочу

  1. Нарисовать синий квадрат на панели, что, к счастью, я уже могу сделать.
  2. ЗахватEVT_BUTTON только на синий квадрат, а не на всю панель?

Я думаю, мне следует создать новый класс для моего SquareBox, но:

  1. Какой класс должен это делатьбыть производным от?
  2. Итак, как добавить обработку событий в этот класс?

Большое спасибо.

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()

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Возможно, вам понадобится создать собственный виджет.В вики есть статья на эту тему: http://wiki.wxpython.org/CreatingCustomControls

Посмотрите на источник AquaButton или PlateButton, так как это тоже пользовательские элементы управления.

0 голосов
/ 06 октября 2011

Просто привяжите к панели, затем проверьте координаты события.

...