Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用wxPython结束旋转事件_Python_Events_Wxpython_Spinner_Wxwidgets - Fatal编程技术网

如何使用wxPython结束旋转事件

如何使用wxPython结束旋转事件,python,events,wxpython,spinner,wxwidgets,Python,Events,Wxpython,Spinner,Wxwidgets,我的窗口上有一个SpinCtrl,只想在鼠标向上或箭头键向上(旋转结束)时处理旋转事件。因为没有类似的事件,所以我想使用鼠标事件。但是如果我绑定EVT\u LEFT\u DOWN和EVT\u LEFT\u UP,EVT\u SPIN将不再发送,控件将不执行任何操作 如何使用SpinCtrl感知旋转事件的结束?是否可以调用EVT\u LEFT\u DOWN和其他事件上的默认事件处理程序?谁感兴趣:我得到了一个解决方案: class SpinEndEventManager(object):

我的窗口上有一个SpinCtrl,只想在鼠标向上或箭头键向上(旋转结束)时处理旋转事件。因为没有类似的事件,所以我想使用鼠标事件。但是如果我绑定
EVT\u LEFT\u DOWN
EVT\u LEFT\u UP
EVT\u SPIN
将不再发送,控件将不执行任何操作


如何使用SpinCtrl感知旋转事件的结束?是否可以调用
EVT\u LEFT\u DOWN
和其他事件上的默认事件处理程序?

谁感兴趣:我得到了一个解决方案:

class SpinEndEventManager(object):
    def __init__(self):
        self._controls = []
        self._event_handlers = []
        self._has_spinned = False

    def add(self, control, event_handler):
        self._controls.append(control)
        self._event_handlers.append(event_handler)
        control.Bind(wx.EVT_SPINCTRL, self._on_event)
        control.Bind(wx.EVT_LEFT_UP, self._on_event)
        control.Bind(wx.EVT_KEY_DOWN, self._on_event)
        control.Bind(wx.EVT_KEY_UP, self._on_event)

    def _on_event(self, event):
        is_spin_end_event = False
        event_type = event.GetEventType()
        control = event.GetEventObject()
        if event_type == wx.wxEVT_COMMAND_SPINCTRL_UPDATED:
            self._has_spinned = True
        elif event_type == wx.wxEVT_LEFT_UP:
            if self._has_spinned:
                is_spin_end_event = True
            event.Skip()
        elif event_type == wx.wxEVT_KEY_DOWN:
            key = event.GetKeyCode()
            old_value = control.GetValue()
            if key == wx.WXK_UP:
                value = old_value + 1
            elif key == wx.WXK_DOWN:
                value = old_value - 1
            control.SetValue(value)
            value = control.GetValue()
            if value != old_value:
                self._has_spinned = True
            if key == wx.WXK_DOWN:
                value_string_length = len(str(value))
                control.SetSelection(value_length, value_string_length)
        elif event_type == wx.wxEVT_KEY_UP:
            if self._has_spinned:
                is_spin_end_event = True
        if is_spin_end_event:
            self._has_spinned = False
            index = self._controls.index(control)
            self._event_handlers[index](event)

您可以通过调用
event.Skip()