def onChangeDateTime(self, event, whichCtrl, lastKey): try: # ------ bug in wxDateTimePickerCtrl: m_date not in sync occurs if month not changed stdate = self.startDate.GetValue() except: stdate = self.start_datetime sttime = self.startTime.GetValue(as_wxTimeSpan=True) # update all datetime values self.start_datetime = gbl.start_datetime = gbl.cfg_dict[ self.mon_ID]['start_datetime'] = stdate.AddTS(sttime) # -------- navigation for date & time controls if lastKey == 'Return' and whichCtrl == 'start_date': self.startTime.SetFocus() # done with date, proceed to time elif lastKey == 'Return' and whichCtrl == 'start_time': self.sourceFPS.SetFocus() # done with time, proceed to fps if lastKey == 'Tab' and whichCtrl == 'start_date': EVT_RIGHT = wx.KeyEvent( 47) # '/' moves focus to right in datepickerctrl self.startDate.HandleAsNavigationKey(EVT_RIGHT) self.startDate.Layout() elif lastKey == 'Tab' and whichCtrl == 'start_time': EVT_RIGHT = wx.KeyEvent( 47) # '/' moves focus to right in datepickerctrl self.startTime.HandleAsNavigationKey(EVT_RIGHT) print('check')
def emulate_typing(string, ctrlFlag=False, altFlag=False, shiftFlag=False): """ emulate_typing the string into the current focused widget """ success = True def set_event_info(event): # setup event info for a keypress event event.m_keyCode = keyCode event.m_rawCode = keyCode event.m_shiftDown = char.isupper() or shiftFlag event.m_controlDown = event.m_metaDown = ctrlFlag event.m_altDown = altFlag event.SetEventObject(widget) # for each key, check for specials, then try several approaches for char in string: keyCode = ord(char) if keyCode == wx.WXK_RETURN: emulate_return() elif keyCode == wx.WXK_TAB: emulate_tab(shiftFlag=shiftFlag) else: # in case the focus has changed, get the new focused widget widget = wx.Window_FindFocus() if widget is None: success = False else: # try calling any bound key handler keyPress = wx.KeyEvent(wx.wxEVT_KEY_DOWN) set_event_info(keyPress) downWorked = widget.ProcessEvent(keyPress) keyUp = wx.KeyEvent(wx.wxEVT_KEY_UP) set_event_info(keyUp) upWorked = widget.ProcessEvent(keyUp) if not (downWorked or upWorked): # key handler worked? # try calling EmulateKeyPress emulateMethod = getattr(widget, 'EmulateKeyPress', lambda k: False) if (wx.Platform == "__WXMSW__" or not emulateMethod(keyPress)): # emulate worked? # try calling WriteText writeMethod = getattr(widget, 'WriteText', None) if writeMethod: writeMethod(char) else: success = False # remember we had a failure if success: wx.GetApp().Yield(True) return success
def on_save_button(self, evt): # Send a enter key event to property for update values event = wx.KeyEvent(wx.wxEVT_CHAR) event.m_keyCode = wx.WXK_RETURN self.cmds_pg.GetEventHandler().ProcessEvent(event) # make this object the current nebulagui.nebula_object = self.object # Get redo command self.redo = self.__get_redo_command() # Get undo command self.undo = self.__get_undo_command() # new command servers.get_command_server().newcommand(str(self.redo), str(self.undo)) self.draw_state_commands(self.object) if self.object.hascommand("beginnewobjectentityclass"): servers.get_entity_class_server().setentityclassdirty( self.object, True) elif self.object.hascommand("getid"): servers.get_entity_object_server().setentityobjectdirty( self.object, True) if self.object.isa("nscenenode"): self.object.loadresources() self.object.setobjectdirty(True)
def OnKeyDown2(self, event): ## print event.GetEventType() key = event.GetKeyCode() controlDown = event.ControlDown() if controlDown and key in (wx.WXK_CANCEL, wx.WXK_PAUSE): self._kill_me() elif not controlDown and key in (wx.WXK_SCROLL, wx.WXK_CANCEL, wx.WXK_PAUSE): self.scroll ^= 1 elif not self.filter and key in (wx.WXK_UP, wx.WXK_DOWN): self.OnHistoryReplace(step={wx.WXK_DOWN: -1, wx.WXK_UP: 1}[key]) elif controlDown and key in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER): if not self.filter: return self.processLine() self.AddText('\n') command = self.getcmd() self.push(command) #todo: add better HOME/END handling elif key == wx.WXK_NUMPAD_ENTER: #emulate a standard enter keypress a = wx.KeyEvent(eventType=wx.wxEVT_KEY_DOWN) a.m_keyCode = wx.WXK_RETURN for i in ('m_altDown', 'm_controlDown', 'm_metaDown', 'm_rawFlags', 'm_scanCode', 'm_shiftDown', 'm_x', 'm_y'): setattr(a, i, getattr(event, i)) wx.PostEvent(self, a) else: event.Skip() if self.filter and __name__ != '__main__': self.gotcharacter
def clone_key_event(self, event): if wx.version().split('.')[:2] > ['2', '8']: evt = MyKeyEvent() evt.altDown = event.altDown evt.controlDown = event.controlDown evt.KeyCode = event.KeyCode evt.metaDown = event.metaDown if wx.Platform == '__WXMSW__': evt.RawKeyCode = event.RawKeyCode evt.RawKeyFlags = event.RawKeyFlags #evt.m_scanCode = event.m_scanCode evt.shiftDown = event.shiftDown evt.X = event.X evt.Y = event.Y else: evt = wx.KeyEvent() evt.m_altDown = event.m_altDown evt.m_controlDown = event.m_controlDown evt.m_keyCode = event.m_keyCode evt.m_metaDown = event.m_metaDown if wx.Platform == '__WXMSW__': evt.m_rawCode = event.m_rawCode evt.m_rawFlags = event.m_rawFlags #evt.m_scanCode = event.m_scanCode evt.m_shiftDown = event.m_shiftDown evt.m_x = event.m_x evt.m_y = event.m_y evt.SetEventType(event.GetEventType()) evt.SetId(event.GetId()) return evt
def onOpen(self, event): """ Runs when you try to open a file:\n * Lexes and parses the document and loads it into webview. """ fd = wx.FileDialog(self, "Open...", wildcard="AlmostMarkdown files (*.amd)|*.amd", style=wx.FD_OPEN) if fd.ShowModal() == wx.ID_CANCEL: return pathname = fd.GetPath() try: f = open(pathname, 'r') f.close() self.currentAMD = pathname self.edit.LoadFile(pathname) self.onKeyUp(wx.KeyEvent(wx.wxEVT_NULL)) tokens = lexer.lex(self.edit.GetValue()) self.generateHtml(tokens, self.html, self.exeDir) self.wv.LoadURL(f"file://{self.html}") except IOError: wx.LogError("Cannot open the specified file '%s'." % pathname)
def setMasks(): for tlw in wx.GetTopLevelWindows(): if "masksandfiltersDialog" in type(tlw).__name__: dlg = tlw break dlg.panel.notebook.SetSelection(0) event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_CONTROL_A) dlg.panel.masks_list.GetEventHandler().ProcessEvent(event) event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_DELETE) dlg.panel.masks_list.GetEventHandler().ProcessEvent(event) self.addMask(dlg.panel.masks_list, "my mask", "(_disk\\w)$", True) event = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, wx.ID_OK) dlg.panel.masks_list.GetEventHandler().ProcessEvent(event)
def OnTextEnter(self, event): wx.Control.SetFocus(self) wx.Control.SetFocus(self) new_event = wx.KeyEvent(wx.wxEVT_KEY_DOWN) new_event.SetEventObject(self) new_event.SetId(self.GetId()) new_event.m_keyCode = wx.WXK_RETURN wx.PostEvent(self.parent, new_event)
def setFilters(): for tlw in wx.GetTopLevelWindows(): if "masksandfiltersDialog" in type(tlw).__name__: dlg = tlw break dlg.panel.notebook.SetSelection(1) event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_CONTROL_A) dlg.panel.filters_list.GetEventHandler().ProcessEvent(event) event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_DELETE) dlg.panel.filters_list.GetEventHandler().ProcessEvent(event) self.addFilter(dlg.panel.filters_list, "my filter", "(wire)", "foo", True) self.addFilter(dlg.panel.filters_list, "my filter 2", "(^(the)\\b|, the)", " ", True) event = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, wx.ID_OK) dlg.panel.filters_list.GetEventHandler().ProcessEvent(event)
def PressKey( window, key ): event = wx.KeyEvent( wx.EVT_KEY_DOWN.typeId ) event.m_keyCode = key event.SetEventObject( window ) event.SetId( window.GetId() ) wx.PostEvent( window, event )
def test_textctrl(self): mocked_change_handler = MagicMock() mocked_enter_handler = MagicMock() expected_state = { 'value': '123', 'name': 'My Cool Control', 'style': wx.TE_PROCESS_ENTER, 'on_change': mocked_change_handler, 'size': (100, 20) } app = wx.App() component = wsx([ c.Frame, { 'show': True, 'size': (999, 999) }, # note: the inner block is required so that the widget's # size prop can be honored (without it, it'd get resized to # the parent frame's size after `Layout` gets called. [c.Block, {}, [c.TextCtrl, { **expected_state, 'proportion': 0 }]] ]) frame = render(component, None) instance = frame.Children[0].Children[0] try: instance.Bind(wx.EVT_TEXT_ENTER, mocked_enter_handler) except Exception: self.fail(""" Unexpected failure. Either the test definition has regressed, and it is now missing `wx.TE_PROCESS_ENTER` as a style argument, or the widget dispatcher has regressed and is no longer applying `style` props correctly""" ) # our props are honored self.assertEqual(instance.Name, expected_state['name']) self.assertEqual(instance.Value, expected_state['value']) self.assertEqual(instance.Size, expected_state['size']) # our enter has picked up and installed self.assertFalse(mocked_enter_handler.called) event = wx.KeyEvent(wx.wxEVT_TEXT_ENTER) instance.ProcessEvent(event) self.assertTrue(mocked_enter_handler.called) # our change handler prop is honored self.assertFalse(mocked_change_handler.called) event = wx.CommandEvent(wx.wxEVT_TEXT, wx.Window.NewControlId()) event.SetString('a') instance.ProcessEvent(event) self.assertTrue(mocked_change_handler.called)
def mockKeyEvent(keycode): """ Manually bypassing the setters as they don'y allow the non wx.wxXXX event variants by default. The internal WX post/prcess machinery doesn't handle key codes well for some reason, thus has to be mocked and manually passed to the relevant handler. """ event = wx.KeyEvent() event.KeyCode = keycode return event
def write(self, text, **kws): if self.output is None: self.write_sys(text) else: self.output.SetInsertionPointEnd() pos0 = self.output.GetLastPosition() self.output.WriteText(text) pos1 = self.output.GetLastPosition() self.output.SetStyle(pos0, pos1, self.textstyle) self.output.EmulateKeyPress(wx.KeyEvent()) self.input.SetFocus()
def test_pickchoice(self): sourcesDir = os.path.abspath( os.path.join(os.path.dirname(__file__), "./data/sources")) self.frame.panel.AddSourcesFromDir(sourcesDir) choicesDir = os.path.abspath( os.path.join(os.path.dirname(__file__), "./data/choices")) self.frame.panel.AddChoicesFromDir(choicesDir) for each in self.button_panel.GetChildren(): if each.GetLabel() == "Best match": btn = each break event = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, btn.GetId()) btn.GetEventHandler().ProcessEvent(event) lst = self.frame.panel.list_ctrl item = -1 item = lst.GetNextItem(item) self.passed = False def Pick(): if self.passed: return for dlg in lst.GetChildren(): if isinstance(dlg, main_listctrl.PickCandidate): dlg.text.SetValue("volutaria tubuliflora") event = wx.CommandEvent(wx.wxEVT_TEXT_ENTER, dlg.text.GetId()) dlg.text.GetEventHandler().ProcessEvent(event) self.assertEqual( [ "Abutilon à feuilles marbrées.txt", "35", "Volutaria tubuliflora.txt", "Volutaria tubuliflora.txt", "1", "User choice", "True", ], [ lst.GetItemText(item, col) for col in range(0, len(config.default_columns)) ], ) self.passed = True lst.Select(item) event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_CONTROL_P) wx.CallAfter(Pick) lst.GetEventHandler().ProcessEvent(event) wx.Yield() self.assertEqual(self.passed, True)
def on_execute_button(self, evt): # Send a enter key event to property for update values event = wx.KeyEvent(wx.wxEVT_CHAR) event.m_keyCode = wx.WXK_RETURN self.cmds_pg.GetEventHandler().ProcessEvent(event) if self.inspector == "xml": xmlinspector.execute(self) else: savecmdsinspector.execute(self)
def emulate_return(block=None): """ Simulates a return-key event in the given block """ try: if block: widget = block.widget else: widget = wx.Window_FindFocus() except AttributeError: return False else: # return-key down ret_d = wx.KeyEvent(wx.wxEVT_KEY_DOWN) ret_d.m_keyCode = wx.WXK_RETURN ret_d.SetEventObject(widget) # return-key up ret_up = wx.KeyEvent(wx.wxEVT_KEY_UP) ret_up.m_keyCode = wx.WXK_RETURN ret_up.SetEventObject(widget) # text updated event tu = wx.CommandEvent(wx.wxEVT_COMMAND_TEXT_UPDATED) tu.SetEventObject(widget) # kill focus event kf = wx.FocusEvent(wx.wxEVT_KILL_FOCUS) kf.SetEventObject(widget) # Text enter ent = wx.CommandEvent(wx.wxEVT_COMMAND_TEXT_ENTER) ent.SetEventObject(widget) #work around for mac bug if widget is not None: widget.ProcessEvent(tu) #for start/end time and location field #work around for canvasItem if widget is not None: widget.ProcessEvent(kf) #for canvasItem title # events processing widget.ProcessEvent(ret_d) widget.ProcessEvent(ret_up) # Give Yield & Idle to the App idle() return True
def addMask(self, lst, name, regexp, active): event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_CONTROL_M) lst.GetEventHandler().ProcessEvent(event) row_id = lst.GetItemCount() - 1 lst.SetItem(row_id, 1, name) lst.SetItem(row_id, 2, regexp) event = wx.ListEvent(wx.wxEVT_LIST_END_LABEL_EDIT) event.SetIndex(row_id) event.SetColumn(2) lst.GetEventHandler().ProcessEvent(event) lst.CheckItem(row_id, active)
def EventMouseWheel(self, event): if self._text_ctrl.GetValue() == '' and len(self._dropdown_list) == 0: if event.GetWheelRotation() > 0: id = ClientCaches.MENU_EVENT_ID_TO_ACTION_CACHE.GetTemporaryId( 'select_up') else: id = ClientCaches.MENU_EVENT_ID_TO_ACTION_CACHE.GetTemporaryId( 'select_down') new_event = wx.CommandEvent( commandType=wx.wxEVT_COMMAND_MENU_SELECTED, winid=id) self.ProcessEvent(new_event) else: if event.CmdDown(): key_event = wx.KeyEvent(wx.EVT_CHAR_HOOK.typeId) if event.GetWheelRotation() > 0: key_event.m_keyCode = wx.WXK_UP else: key_event.m_keyCode = wx.WXK_DOWN self._dropdown_list.ProcessEvent(key_event) else: # for some reason, the scrolledwindow list doesn't process scroll events properly when in a popupwindow # so let's just tell it to scroll manually (start_x, start_y) = self._dropdown_list.GetViewStart() if event.GetWheelRotation() > 0: self._dropdown_list.Scroll(-1, start_y - 3) else: self._dropdown_list.Scroll(-1, start_y + 3) if event.GetWheelRotation() > 0: command_type = wx.wxEVT_SCROLLWIN_LINEUP else: command_type = wx.wxEVT_SCROLLWIN_LINEDOWN wx.PostEvent(self, wx.ScrollWinEvent(command_type))
def test_plot_topo_butterfly(): "Test plot.TopoButterfly" ds = datasets.get_uts(utsnd=True) # single row p = plot.TopoButterfly('utsnd', ds=ds) p.set_time(0.2) # t keypress on topomap x, y = p.topo_axes[0].transAxes.transform((.5, .5)) event = KeyEvent('test', p.canvas, 't', x, y, wx.KeyEvent()) p._on_key_press(event) p.close() p = plot.TopoButterfly('utsnd', ds=ds, vmax=0.2, w=6) p.close() # multiple rows p = plot.TopoButterfly('utsnd', 'A%B', ds=ds, w=6) if not IS_WINDOWS: assert (*p.figure.get_size_inches(), ) == (6, 12) # t keypress on topomaps for ax in p.topo_axes: x, y = ax.transAxes.transform((.5, .5)) event = KeyEvent('test', p.canvas, 't', x, y, wx.KeyEvent()) p._on_key_press(event) p.close() p = plot.TopoButterfly('utsnd', mark=[1, 2], ds=ds) p.close() p = plot.TopoButterfly('utsnd', mark=['1', '2'], ds=ds) p.set_vlim(2) assert p.get_vlim() == (-2.0, 2.0) p.set_ylim(-1, 1) assert p.get_ylim() == (-1.0, 1.0) p.close()
def OnChar(self, event): #print event.GetKeyCode() if event.GetKeyCode() == wx.WXK_TAB: wx.Control.SetFocus(self) new_event = wx.KeyEvent(wx.wxEVT_KEY_DOWN) new_event.SetEventObject(self) new_event.SetId(self.GetId()) new_event.m_keyCode = wx.WXK_TAB wx.PostEvent(self.parent, new_event) elif event.GetKeyCode() == wx.WXK_UP: self.step(dir_up=True) elif event.GetKeyCode() == wx.WXK_DOWN: self.step(dir_up=False) else: event.Skip()
def clone_key_event(self, event): evt = wx.KeyEvent() evt.m_altDown = event.m_altDown evt.m_controlDown = event.m_controlDown evt.m_keyCode = event.m_keyCode evt.m_metaDown = event.m_metaDown if wx.Platform == '__WXMSW__': evt.m_rawCode = event.m_rawCode evt.m_rawFlags = event.m_rawFlags evt.m_scanCode = event.m_scanCode evt.m_shiftDown = event.m_shiftDown evt.m_x = event.m_x evt.m_y = event.m_y evt.SetEventType(event.GetEventType()) evt.SetId(event.GetId()) return evt
def Type(string, ctrlFlag=False, altFlag=False, shiftFlag=False): """ Types the string into the current focused widget, returns True if successful """ stringSuccess = True for char in string: try: keyPressMethod = _wx.Window_FindFocus().EmulateKeyPress except AttributeError: return False else: keyCode = ord(char) # returns ASCII value of char keyPress = _wx.KeyEvent(_wx.wxEVT_KEY_DOWN) keyPress.m_keyCode = keyCode keyPress.m_shiftDown = char.isupper() or shiftFlag keyPress.m_controlDown = keyPress.m_metaDown = ctrlFlag keyPress.m_altDown = altFlag charSuccess = keyPressMethod(keyPress) stringSuccess = stringSuccess and charSuccess return stringSuccess
def OnKeyDownStripNewlineModifiers(event): if event.KeyCode == wx.WXK_RETURN and event.Modifiers: e = wx.KeyEvent(wx.EVT_CHAR) e.m_keyCode = event.m_keyCode e.m_rawCode = event.m_rawCode e.m_rawFlags = event.m_rawFlags e.m_scanCode = event.m_scanCode e.m_controlDown = False e.m_altDown = False e.m_metaDown = False e.m_shiftDown = False tc.WriteText('\n') tc.ProcessEvent(e) else: event.Skip()
def testEditing(self): rowIndex = 1 primaryColumnIndex = self.objectListView.GetPrimaryColumnIndex() self.objectListView.cellEditMode = ObjectListView.CELLEDIT_F2ONLY # self.objectListView.SortBy(primaryColumnIndex+1) originalName = self.objectListView[rowIndex].name self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumnIndex).GetText(), originalName) self.objectListView.DeselectAll() self.objectListView.SetItemState( rowIndex, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED) # Fake an F2, change the value of the edit, and then fake a Return to # commit the change evt = wx.KeyEvent(wx.EVT_CHAR.evtType[0]) evt.m_keyCode = wx.WXK_F2 self.objectListView._HandleChar(evt) self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex) self.objectListView.cellEditor.SetValue("new name for X") self.objectListView.FinishCellEdit() evt.m_keyCode = wx.WXK_RETURN self.objectListView._HandleChar(evt) self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumnIndex).GetText(), "new name for X") # Put the original value back evt.m_keyCode = wx.WXK_F2 self.objectListView._HandleChar(evt) self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex) self.objectListView.cellEditor.SetValue(originalName) self.objectListView.FinishCellEdit() evt.m_keyCode = wx.WXK_RETURN self.objectListView._HandleChar(evt) self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumnIndex).GetText(), originalName)
def OnButton(self, evt): """Handles events from the buttons on the bar @param evt: Event that called this handler """ e_id = evt.GetId() if e_id == ID_CLOSE_BUTTON: self.Hide() elif e_id in [ID_SEARCH_NEXT, ID_SEARCH_PRE]: search = self.FindWindowById(ID_SEARCH_CTRL) if search != None: evt = wx.KeyEvent(wx.wxEVT_KEY_UP) evt.m_keyCode = wx.WXK_RETURN if e_id == ID_SEARCH_PRE: evt.m_shiftDown = True else: evt.m_shiftDown = False wx.PostEvent(search, evt) else: evt.Skip()
def test_resetmatch(self): sourcesDir = os.path.abspath( os.path.join(os.path.dirname(__file__), "./data/sources")) self.frame.panel.AddSourcesFromDir(sourcesDir) choicesDir = os.path.abspath( os.path.join(os.path.dirname(__file__), "./data/choices")) self.frame.panel.AddChoicesFromDir(choicesDir) for each in self.button_panel.GetChildren(): if each.GetLabel() == "Best match": btn = each break event = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, btn.GetId()) btn.GetEventHandler().ProcessEvent(event) lst = self.frame.panel.list_ctrl item = -1 item1 = lst.GetNextItem(item) lst.Select(item1) item2 = lst.GetNextItem(item1) lst.Select(item2) event = wx.KeyEvent(wx.wxEVT_CHAR) event.SetKeyCode(wx.WXK_CONTROL_R) lst.GetEventHandler().ProcessEvent(event) self.assertEqual( ["Abutilon à feuilles marbrées.txt", "", "", "", "", "", "True"], [ lst.GetItemText(item1, col) for col in range(0, len(config.default_columns)) ], ) self.assertEqual( ["Acanthe à feuilles molles.txt", "", "", "", "", "", "True"], [ lst.GetItemText(item2, col) for col in range(0, len(config.default_columns)) ], )
def test_KeyEvent_GetUnicodeKey(self): evt = wx.KeyEvent() unikey = evt.GetUnicodeKey() self.assertTrue(isinstance(unikey, int))
def test_KeyEvent_ctor(self): evt = wx.KeyEvent()
def test_KeyEvent_SetRawKeyCode(self): evt = wx.KeyEvent() value = wx.WXK_ADD evt.SetRawKeyCode(value) self.assertTrue(evt.GetRawKeyCode() == value)
def test_KeyEvent_SetRawKeyFlags(self): evt = wx.KeyEvent() value = 3 evt.SetRawKeyFlags(value) self.assertTrue(evt.GetRawKeyFlags() == value)