我如何以编程方式下拉wxPython中的wx.Menu

时间:2014-03-06 19:20:35

标签: python menu wxpython

如果我有一个wx.Menu(在一个wx.MenuBar中,在一个框架的顶部,就像正常一样) - 我怎样才能使该菜单下拉并获得焦点,而不是点击它。我希望行为就像用户按下该菜单的键盘加速器快捷键一样(例如Alt + F,对于&文件菜单)

3 个答案:

答案 0 :(得分:2)

我有相同的要求,并找到了使用PopupMenu函数的简单方法。它不是从菜单对象调用,而是从菜单的父级(窗口,框架等)调用。

要确保菜单出现在特定位置,无论您使用何种鼠标,都要向PopupMenu函数提供位置参数。

在下面的示例中,我只是在向下箭头的小区域中单击右侧时打开了一个打开菜单的platebtn,进入一个按钮,当您单击它时以相同的方式打开相同的菜单表面上的任何地方。

示例:

import wx
import wx.lib.platebtn as platebtn
class MyFrame(wx.Frame):
    def __init__(self, parent, ID, title):
        wx.Frame.__init__(self, parent, ID, title, size=(300, 250))
        wx.Panel(self,-1, style=wx.SUNKEN_BORDER)
        droparrow = platebtn.PB_STYLE_DROPARROW | platebtn.PB_STYLE_SQUARE | platebtn.PB_STYLE_GRADIENT
        self.btn1 = platebtn.PlateButton(self, wx.ID_ANY, label=" File ", style=droparrow)
        self.btn1.SetPressColor(wx.LIGHT_GREY) 
        self.menu1 = wx.Menu()
        self.menu1.Append(1, "New")
        self.menu1.Append(2, "Open")
        self.menu1.Append(3, "Exit")
        sm = wx.Menu()
        sm.Append(8, "sub item 1")
        sm.Append(9, "sub item 1")
        self.menu1.AppendMenu(7, "Test Submenu", sm)
        self.btn1.SetMenu(self.menu1)
        self.Bind(wx.EVT_BUTTON, self.OnFile, self.btn1)
    def OnFile(self, event):
        self.btn1.PopupMenu(self.menu1, pos=(1, self.btn1.GetSize()[1]))
app = wx.App(False)
frame = MyFrame(None, -1, "PopupMenu example")
frame.Show()
app.MainLoop()

答案 1 :(得分:1)

尝试wx.PostEvent

event = wx.MenuEvent(wx.wxEVT_LEFT_DOWN, menuitem.GetId(), menu)
wx.PostEvent(frame, event)

其他wx鼠标事件:http://www.wxpython.org/docs/api/wx.MouseEvent-class.html

google groups thread

中找到

答案 2 :(得分:0)

要为程序中的菜单定义加速器,请通过给定示例了解

例如:

file_menu=wx.Menu()
menubar=wx.MenuBar()
menubar.Append(file_menu,"&File")  
self.SetMenuBar(menubar)

现在我们可以通过按ALT + F来访问“文件”菜单(此处)。

如果我们还有其他菜单,在按下ALT时,它会指向第一个菜单栏,您可以根据menu_item的名称按下下一个键。