簡體   English   中英

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

[英]How do I programmatically pull down a wx.Menu in wxPython

如果我有一個wx.Menu(在一個wx.MenuBar中,在一個框架的頂部,就像正常一樣) - 我怎樣才能使該菜單下拉並獲得焦點,而不是點擊它。 我希望行為就像用戶按下該菜單的鍵盤加速器快捷鍵一樣(例如Alt + F,對於&File菜單)

我有相同的要求,並找到了使用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()

嘗試使用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中找到

要在程序中定義菜單的加速器,請通過給定的示例了解

例:

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

現在我們可以通過按ALT + F訪問“文件”菜單(此處)。

如果我們還有其他菜單,在按下ALT時,它將指向第一個菜單欄,您可以根據menu_item的名稱按下下一個鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM