Python:下拉菜单

0 投票
2 回答
2034 浏览
提问于 2025-04-17 07:10

我在wxPython中创建了这个下拉菜单:

import wx


class Example(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs) 

        self.InitUI()

    def InitUI(self):

        menubar = wx.MenuBar()

        fileMenu = wx.Menu()
        fileMenu.Append(wx.ID_NEW, '&New')
        fileMenu.Append(wx.ID_OPEN, '&Open')
        fileMenu.Append(wx.ID_SAVE, '&Save')
        fileMenu.AppendSeparator()

        imp = wx.Menu()
        imp.Append(wx.ID_ANY, 'Import newsfeed list...')
        imp.Append(wx.ID_ANY, 'Import bookmarks...')
        imp.Append(wx.ID_ANY, 'Import mail...')

        fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp)

        qmi = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+W')
        fileMenu.AppendItem(qmi)

        self.Bind(wx.EVT_MENU, self.OnQuit, qmi)

        menubar.Append(fileMenu, '&File')
        self.SetMenuBar(menubar)

        self.SetSize((350, 250))
        self.SetTitle('Submenu')
        self.Centre()
        self.Show(True)

    def OnQuit(self, e):
        self.Close()

def main():

    ex = wx.App()
    Example(None)
    ex.MainLoop()    


if __name__ == '__main__':
    main()

我的问题是,当鼠标指向“文件”时,所有的菜单项会自动打开,显示“新建”、“打开”、“退出”。你可以看看这个例子 这里,这样你就能明白我想要做的是什么。

2 个回答

1

我认为,跨平台的用户界面库不应该去改变操作系统的界面行为。

在大多数操作系统中,菜单不会在鼠标悬停时自动弹出,所以wxWindows也不这样做。

可能有办法给菜单添加一个鼠标悬停的监听器,让它自动弹出,但我不建议这样做,因为这不是常见的行为(除了很多网站)。也有可能这根本就做不到,因为在wxWindows支持的所有操作系统上,这种方式可能不稳定。

我不能给你具体的细节,因为我其实从来没有用过wxWindows。我只在Linux上工作,直接使用GTK会更合理一些。

1

你可以试试FlatMenu,这是一个用纯Python写的自定义小部件,可能能满足你的需求。其实自己动手改造它会比wxWidgets版本简单多了。为了让你明白,wxPython会尽量使用操作系统本身的控件,所以如果在你的操作系统上是那样的表现,wxPython也会这样做。这就是我觉得你应该尝试FlatMenu的原因。你可以在这里找到文档和示例:http://xoomer.virgilio.it/infinity77/AGW_Docs/flatmenu_module.html#flatmenu

撰写回答