如何解决wxpython 工具栏菜单键盘导航
我一直在为盲人开发一个应用程序,所以我决定为 GUI 使用 python 和 wxPython。问题是我无法使用选项卡导航 wx.toolbar。这是我的实际代码。
menuToolBar = self.CreatetoolBar(style=wx.TB_FLAT)
menuToolBar.AddSeparator()
menuToolBar.AddTool(ID_NUEVO,"Nuevo Archivo",wx.Bitmap(
os.path.join(self.__rutaPrincipal,"img/nueva pagina.png")),"Nuevo Archivo")
menuToolBar.AddSeparator()
menuToolBar.AddTool(ID_GUARDAR_ARCHIVO,"Guardar Archivo","img/guardar pagina.png")),"Guardar Archivo")
menuToolBar.AddTool(ID_ABRIR_ARCHIVO,"Abrir Página","img/abrir pagina.png")),"Abrir Página")
menuToolBar.AddSeparator()
menuToolBar.AddTool(ID_FOCUS_PANEL_ESCRITURA,"Foco Escritura","img/panel escritura.png")),"Foco Escritura")
menuToolBar.AddTool(ID_FOCUS_PANEL_RESULTADO,"Foco Resultado","img/panel resultado.png")),"Foco Resultado")
menuToolBar.AddSeparator()
menuToolBar.AddTool(ID_CERRAR_PAGINA,"Cerrar Página","img/cerrar pagina.png")),"Cerrar Página")
menuToolBar.AddSeparator()
menuToolBar.Realize()
有什么配置可以实现吗?或者也许还有其他组件可以帮助我? PD我是 Python 开发和 Stackoverflow 的新手
解决方法
您需要在您的 Accelerators
以及可能的 MenuBar
中实现 MenuItem
。
加速器表允许应用程序为菜单或按钮命令指定键盘快捷键表。
通常,这些是使用菜单项中的文本设置的,绕过 wx.AcceleratorTable
。
p1 = wx.MenuItem(playm,wx.NewIdRef(),'&Play\tCtrl+P')
此处的 &Play
将 P
设置为菜单加速键,并将 Ctrl+P 设置为菜单项所代表功能的热键。
换句话说,在导航菜单时,按 P
将选择播放菜单项。不导航菜单时,只需按 Ctrl+P 即可运行该功能。
注意
- 您不必同时设置。
- 不要在单个菜单或菜单栏中多次将
&
与符号放在同一个字母前,因为只有第一个会起作用。
例如“&Save”和“另存为”会起作用,使用S
表示“保存”,使用V
表示“另存为”
要访问菜单快捷方式,请按 Alt
按钮,然后按任何带下划线的字母。
一些带有菜单加速器但没有指定热键的最小代码:
import wx
class MainWindow(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self,title=title,size=(200,100))
self.control = wx.TextCtrl(self,style=wx.TE_MULTILINE)
# A Statusbar in the bottom of the window
self.CreateStatusBar()
# Setting up the menus
'''Define main items'''
filemenu = wx.Menu()
editmenu = wx.Menu()
infomenu = wx.Menu()
'''Items'''
# file menu
menu_open = filemenu.Append(wx.ID_OPEN,"Open")
filemenu.Append(wx.ID_NEW,"New")
filemenu.Append(wx.ID_SAVE,"Save")
filemenu.Append(wx.ID_SAVEAS,"Save as")
filemenu.Append(wx.ID_EXIT,'&Quit','Quit application')
filemenu.AppendSeparator()
filemenu.Append(wx.ID_PRINT,"&Print")
filemenu.Append(wx.ID_PRINT_SETUP,"Print setup")
filemenu.Append(wx.ID_PREVIEW,"Preview")
# edit menu
editmenu.Append(wx.ID_COPY,"Copy")
editmenu.Append(wx.ID_CUT,"Cut")
editmenu.Append(wx.ID_PASTE,"Paste")
editmenu.AppendSeparator()
editmenu.Append(wx.ID_UNDO,"Undo")
editmenu.Append(wx.ID_REDO,"Re-do it")
# info menu
infomenu.Append(wx.ID_ABOUT,"About")
'''Bind items for activation'''
# bind file menu
self.Bind(wx.EVT_MENU,self.OnExit,id=wx.ID_EXIT)
self.Bind(wx.EVT_MENU,self.OnOpen)
# Creating the menubar.
menuBar = wx.MenuBar()
# Add menus
menuBar.Append(filemenu,"&File")
menuBar.Append(editmenu,"&Edit")
menuBar.Append(infomenu,"&Help")
# Adding the MenuBar to the Frame content.
self.SetMenuBar(menuBar)
self.Show(True)
def OnOpen(self,event):
print ("Menu item selected")
# event skip as we want to continue checking events in case Quit was chosen
event.Skip()
def OnExit(self,event):
self.Destroy()
app = wx.App(False)
frame = MainWindow(None,"Sample editor")
app.MainLoop()
运行此代码并按 Alt
键,按未划线的字母 F、E 或 H 之一,然后使用箭头键或任何带下划线的字母导航菜单。
注意某些功能会自动分配热键,例如Ctrl+Q 是退出。
,我没有删除现有的 anwser(实际上它回答了一个不同的问题),而是将其留在原处,因为我个人认为它以相关的方式很有用。
这是我在评论中提到的一个例子,关于制作自己的工具栏,您可以使用 Tab、左箭头和右箭头键导航。
这应该足以让您入门。
它使用一个普通按钮和一些通用位图按钮,两者都可以工作,因为我们需要说明当前哪个按钮具有焦点,这是通过为每个按钮使用至少 2 个不同的位图来实现的。一个普通,一个聚焦。
struct SomeData {
let `1. Information`: String
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。