wxPython, как запускать события?

Я создаю свой собственный класс кнопок, подкласс панели, на которой я рисую с помощью DC, и мне нужно запускать wx.EVT_BUTTON при нажатии моей пользовательской кнопки. Как это сделать?


person Community    schedule 14.07.2009    source источник


Ответы (2)


Вики довольно хороша для справки. У Андреа Гаваны есть довольно полный рецепт создания собственных настраиваемых элементов управления. Следующее взято непосредственно оттуда и расширяет ответ FogleBird (обратите внимание, что self относится к подклассу wx.PyControl):

def SendCheckBoxEvent(self):
    """ Actually sends the wx.wxEVT_COMMAND_CHECKBOX_CLICKED event. """

    # This part of the code may be reduced to a 3-liner code
    # but it is kept for better understanding the event handling.
    # If you can, however, avoid code duplication; in this case,
    # I could have done:
    #
    # self._checked = not self.IsChecked()
    # checkEvent = wx.CommandEvent(wx.wxEVT_COMMAND_CHECKBOX_CLICKED,
    #                              self.GetId())
    # checkEvent.SetInt(int(self._checked))
    if self.IsChecked():

        # We were checked, so we should become unchecked
        self._checked = False

        # Fire a wx.CommandEvent: this generates a
        # wx.wxEVT_COMMAND_CHECKBOX_CLICKED event that can be caught by the
        # developer by doing something like:
        # MyCheckBox.Bind(wx.EVT_CHECKBOX, self.OnCheckBox)
        checkEvent = wx.CommandEvent(wx.wxEVT_COMMAND_CHECKBOX_CLICKED,
                                     self.GetId())

        # Set the integer event value to 0 (we are switching to unchecked state)
        checkEvent.SetInt(0)

    else:

        # We were unchecked, so we should become checked
        self._checked = True

        checkEvent = wx.CommandEvent(wx.wxEVT_COMMAND_CHECKBOX_CLICKED,
                                     self.GetId())

        # Set the integer event value to 1 (we are switching to checked state)
        checkEvent.SetInt(1)

    # Set the originating object for the event (ourselves)
    checkEvent.SetEventObject(self)

    # Watch for a possible listener of this event that will catch it and
    # eventually process it
    self.GetEventHandler().ProcessEvent(checkEvent)

    # Refresh ourselves: the bitmap has changed
    self.Refresh()
person DrBloodmoney    schedule 15.07.2009

Создайте объект wx.CommandEvent, вызовите его сеттеры для установки соответствующих атрибутов и передайте его в wx.PostEvent.

http://docs.wxwidgets.org/stable/wx_wxcommandevent.html#wxcommandeventctor

http://docs.wxwidgets.org/stable/wx_miscellany.html#wxpostevent

Это дубликат, здесь есть дополнительная информация о создании этих объектов:

wxPython: вызов события вручную

person FogleBird    schedule 14.07.2009
comment
Не могли бы вы дать мне более подробное объяснение? Я не более чем новичок на самом деле. Также спасибо за ответ. - person ; 15.07.2009