如果我有一个wx.Menu(在一个wx.MenuBar中,在一个框架的顶部,就像正常一样) - 我怎样才能使该菜单下拉并获得焦点,而不是点击它。我希望行为就像用户按下该菜单的键盘加速器快捷键一样(例如Alt + F,对于&文件菜单)
答案 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
中找到答案 2 :(得分:0)
要为程序中的菜单定义加速器,请通过给定示例了解
file_menu=wx.Menu()
menubar=wx.MenuBar()
menubar.Append(file_menu,"&File")
self.SetMenuBar(menubar)
现在我们可以通过按ALT + F来访问“文件”菜单(此处)。
如果我们还有其他菜单,在按下ALT时,它会指向第一个菜单栏,您可以根据menu_item的名称按下下一个键。