wxPython菜单文本对齐

2024-05-16 23:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个wxpythongui,希望右对齐快捷方式文本。很明显,可以使用制表符来消除这个问题,但是如果有办法的话,我更希望在本机实现。在

因此,默认菜单项创建是:

menu = wx.Menu()
item_id = 1
item_name = 'My menu item'
help_text = 'Clicking this does something interesting.'
item = menu.append(item_id, item_name, help_text)

我将用快捷方式展开,所以如果我使用的是制表符,应该是:

^{pr2}$

然而,这需要很多手动的\t条目来确保所有条目都排成一行,并且每当菜单项更改名称或添加另一项时,它们都可能需要更新。有没有什么方法可以解决这个问题,例如,一个我没有看到的类方法可以自动将keybinding与菜单项关联起来?在

编辑:我知道当传递像&My menu item这样的文本时,如果加速器表中有与该ID相关联的定义,它会自动使用与指定ID相关联的keybinding来执行操作,对吗?在


Tags: 方法textname文本idmyhelp条目
2条回答

我翻阅了其他几个应用程序的代码来找到答案。事实证明,\t的默认行为并不像它看起来的那样做(即插入一个制表符),但是工具箱会合理地解释为它正是在做我想做的事情。因此,右对齐一个快捷方式的方法很简单:用您想要的文本创建它,后跟\t<shortcut>(与我前面所做的一样)。在上面粘贴的示例代码中,如果我希望我的快捷方式是Ctrl + T,那么它应该是这样的:

menu = wx.Menu()
item_id = 1
item_name = 'My menu item\tCtrl+T'
help_text = 'Clicking this does something interesting.'
item = menu.Append(item_id, item_name, help_text)

编辑:根据Mike Driscoll的very helpful answer更新了以下部分。在

请注意,这会创建快捷方式绑定(wxPython将其选中),但它不能使用Windows上的Alt键使其可选。在

您可以关联Alt键以快速打开菜单并通过在item_name文本中使用和号导航到该菜单,但您仍需要通过AcceleratorTable手动关联所需的键绑定:

^{pr2}$

我想,这实际上是首选的模式,因为在引用item_id的任何地方,都可以自动引用快捷方式。这也将有助于无缝更新。在

虽然Chris在菜单中正确地“\t”缩进keybinding是对的,但我真的不明白他所说的用和号自动关联任何东西是什么意思。与号(&;)确实允许used to type ALT打开“文件”菜单,然后如果键入另一个应用了和号的字母,它将跳转到该菜单项,但不会将菜单项连接到快捷键表。这是通过菜单项的ID完成的

参见以下代码:

import wx

########################################################################
class MyForm(wx.Frame):

    #                                   
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "wx.Menu Tutorial")

        self.panel = wx.Panel(self, wx.ID_ANY)

        menuBar = wx.MenuBar()
        fileMenu = wx.Menu()
        exitId = wx.NewId()
        exitMenuItem = fileMenu.Append(exitId, "&Exit/tCtrl+X",
                                       "Exit the application")
        self.Bind(wx.EVT_MENU, self.onExit, id=exitId )
        menuBar.Append(fileMenu, "&File")
        self.SetMenuBar(menuBar)

        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL,  ord('X'), exitId )])
        self.SetAcceleratorTable(accel_tbl)

    #                                   
    def onExit(self, event):
        """"""
        self.Close()

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()

请注意,exitId用于创建菜单项,将菜单项绑定到EVT_menu,最后,它被用于AcceleratorTable中,以便用户可以使用快捷键。在

以下是一些可能有帮助的参考资料:

相关问题 更多 >