wxpython - 如何将 wxScintilla 命令绑定到 wxScintilla 中的 pageup 和 pagedown?
问题描述
我正在使用来自 wxPython 的 wxScintilla,STC_KEY_PAGEUP
但STC_KEY_PAGEDOWN
在wx.stc
. 如何将键盘快捷键绑定到向上翻页或向下翻页键?
例如,要将返回键绑定到换行命令,我会写:
wxscintilla_ctrl.CmdKeyAssign(STC_KEY_RETURN, STC_SCMOD_NORM, STC_CMD_NEWLINE)
但是没有STC_KEY_*
向上翻页和向下翻页。如何在没有or的情况下调用CmdKeyAssign()
向上和向下绑定页面?STC_KEY_PAGEUP
STC_KEY_PAGEDOWN
wx.stc
解决方案
我相信我对您的问题没有误解,但要激活 PgUp 或 PgDn 上的回调,您只需wx.EVT_KEY_UP
像往常一样绑定到或其他关键事件。然后检查使用了哪个密钥。
对于名称为 PgUp 和 PgDn 的键分配/重新分配CmdKeyAssign()
,令人困惑的是,变成了 Prior 和 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()
推荐阅读
- java - Libgdx 随机图像在每一帧都发生变化
- c - C将readdir写入char数组变量?
- cron-task - 工作不工作早现在工作
- batch-file - Taskkill 批处理文件以关闭无响应的应用程序关闭正在运行且响应的应用程序
- android - 如何在最新版本的 Android Studio 中修复 android...Coordinator Layout?
- python - 写入另一个文件时出现python脚本错误
- firebase-realtime-database - 使用 angularfire2 从索引中检索对象
- android - 全球应用内通知
- python - numpy isclose 函数是否返回错误的答案?
- python - 我的 main.css 文件不会使用 jinja/flask 链接