如何在wxPython中以编程方式下拉wx.Menu
如果我有一个 wx.Menu(在 wx.MenuBar 中,位于窗口的顶部,就像正常的菜单一样)——我该怎么做才能让这个菜单下拉并获得焦点,而不需要点击它。我想要的效果就像用户按下了这个菜单的快捷键一样(比如说,按 Alt+F 来打开 &文件 菜单)。
3 个回答
0
要在你的程序中为菜单定义快捷键,可以通过下面的例子来理解。
例子:
file_menu=wx.Menu()
menubar=wx.MenuBar()
menubar.Append(file_menu,"&File")
self.SetMenuBar(menubar)
现在我们可以通过按下 ALT+F 来访问文件菜单。
如果还有其他菜单,当你按下 ALT 键时,它会指向菜单栏中每个菜单的第一个字母,然后你可以根据菜单项的名字按下下一个键。
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()
2
可以试试用 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
这个信息是在 谷歌讨论组找到的。