Wxpython 如何将WXSCINTILA命令绑定到WXSCINTILA中的pageup和pagedown?

Wxpython 如何将WXSCINTILA命令绑定到WXSCINTILA中的pageup和pagedown?,wxpython,wxwidgets,Wxpython,Wxwidgets,我正在使用wxPython的wxScintilla,在wx.STC中找不到STC_KEY_PAGEUP或STC_KEY_PAGEDOWN。如何将键盘快捷键绑定到page up或page down键 例如,要将return键绑定到newline命令,我将编写: wxscintilla_ctrl.cmdkeysassignstc_KEY_RETURN,STC_SCMOD_NORM,STC_CMD_NEWLINE 但是没有STC_键用于上翻页和下翻页。我如何调用CmdKeyAssign来绑定page

我正在使用wxPython的wxScintilla,在wx.STC中找不到STC_KEY_PAGEUP或STC_KEY_PAGEDOWN。如何将键盘快捷键绑定到page up或page down键

例如,要将return键绑定到newline命令,我将编写:

wxscintilla_ctrl.cmdkeysassignstc_KEY_RETURN,STC_SCMOD_NORM,STC_CMD_NEWLINE
但是没有STC_键用于上翻页和下翻页。我如何调用CmdKeyAssign来绑定page up和page down,而不在wx.STC中使用STC_KEY_PAGEUP或STC_KEY_PAGEDOWN?

我相信我对您的问题没有误解,但要激活PgUp或PgDn上的回调,您只需像往常一样绑定到wx.EVT_KEY_up或其他KEY事件即可。然后检查使用了哪把钥匙

对于使用CmdKeyAssign的密钥分配/重新分配,PgUp和PgDn的名称会混淆为Previor和Next。见下文:

import wx
import wx.stc
class MyApp(wx.App):
    def OnInit(self):
        self.frame = MenuFrame(None, title="STC Test")
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True

ID_READ_ONLY = wx.NewId()

class MenuFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MenuFrame, self).__init__(*args, **kwargs)

        # Attributes
        self.panel = wx.Panel(self)
        self.txtctrl = wx.stc.StyledTextCtrl(self.panel,
                                   style=wx.TE_MULTILINE)

        # Layout
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.txtctrl, 1, wx.EXPAND)
        self.panel.SetSizer(sizer)
        self.CreateStatusBar() # For output display

        # Setup the Menu
        menub = wx.MenuBar()

        # File Menu
        filem = wx.Menu()
        filem.Append(wx.ID_NEW, "New\tCtrl+N")
        filem.Append(wx.ID_OPEN, "Open\tCtrl+O")
        filem.Append(wx.ID_SAVE, "Save\tCtrl+S")
        filem.Append(wx.ID_SAVEAS, "Save_As\tCtrl+Shift+S")
        menub.Append(filem, "&File")

        # Edit Menu
        editm = wx.Menu()
        editm.Append(wx.ID_UNDO, "Undo\tCtrl+Z")
        editm.Append(wx.ID_REDO, "Redo\tCtrl+Shift+Z")
        editm.Append(wx.ID_COPY, "Copy\tCtrl+C")
        editm.Append(wx.ID_CUT, "Cut\tCtrl+X")
        editm.Append(wx.ID_PASTE, "Paste\tCtrl+V")
        editm.Append(wx.ID_SELECTALL, "SelectAll\tCtrl+A")
        editm.AppendSeparator()
        editm.Append(ID_READ_ONLY, "Read Only",
                     kind=wx.ITEM_CHECK)
        menub.Append(editm, "E&dit")

        self.SetMenuBar(menub)

        # Event Handlers
        self.Bind(wx.EVT_MENU, self.OnMenu)
        self.txtctrl.Bind(wx.EVT_KEY_UP, self.OnKey)

        # optionally re-assigning keys to commands
        # PageUp without a modifier key to move 1 word right
        self.txtctrl.CmdKeyAssign(wx.stc.STC_KEY_PRIOR, 0, wx.stc.STC_CMD_WORDRIGHT)
        # PageDown without a modifier key to move 1 word left
        self.txtctrl.CmdKeyAssign(wx.stc.STC_KEY_NEXT, 0, wx.stc.STC_CMD_WORDLEFT)
        # Ctrl + F1 key delete line
        self.txtctrl.CmdKeyAssign(wx.WXK_F1, wx.stc.STC_SCMOD_CTRL, wx.stc.STC_CMD_LINEDELETE)

    def OnKey(self, event):
        keycode = event.GetKeyCode()
        if keycode == wx.WXK_PAGEUP:
            print ("Up")
        if keycode == wx.WXK_PAGEDOWN:
            print ("Down")
        event.Skip()

    def OnMenu(self, event):
        """Handle menu clicks"""
        evt_id = event.GetId()
        actions = { wx.ID_COPY  : self.txtctrl.Copy,
                    wx.ID_CUT   : self.txtctrl.Cut,
                    wx.ID_PASTE : self.txtctrl.Paste,
                    wx.ID_UNDO : self.txtctrl.Undo,
                    wx.ID_REDO : self.txtctrl.Redo,
                    wx.ID_SELECTALL : self.txtctrl.SelectAll}
        action = actions.get(evt_id, None)
        if action:
            action()
        elif evt_id == ID_READ_ONLY:
            # Toggle enabled state
            self.txtctrl.Enable(not self.txtctrl.Enabled)
        elif evt_id == wx.ID_OPEN:
            dlg = wx.FileDialog(self, "Open File", style=wx.FD_OPEN)
            if dlg.ShowModal() == wx.ID_OK:
                fname = dlg.GetPath()
                handle = open(fname, 'r')
                self.txtctrl.SetValue(handle.read())
                handle.close()
        else:
            event.Skip()


if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

也许我应该澄清一点。。我正在尝试使用wxStyledTextCtrl.CmdKeyAssign绑定快捷方式。CmdKeyAssign的第一个参数是STC_KEY_*常量,但没有为page up和page down提供常量。您的解决方案会起作用,但我不确定这是正确的方法。@sorbet您正在寻找STC_KEY_previor和STC_KEY_NEXT。查看我的最新答案