如何向 wx.MenuBar() 添加一个按钮?

Posted

技术标签:

【中文标题】如何向 wx.MenuBar() 添加一个按钮?【英文标题】:How to add a button to the wx.MenuBar()? 【发布时间】:2017-03-05 12:42:53 【问题描述】:

我有以下问题:

wx.Frame() 在全屏模式下会丢失系统菜单以及关闭和最小化按钮。至少在 Windows 上是这样。

这通常是可取的,但不幸的是,我的应用程序的用户会非常愚蠢,并且期望他们使用菜单来执行这两个操作是太过分了。 我必须全屏显示,因为我需要大量空间和每像素控制。

所以我将不得不手动添加这两个按钮。我打算使用位图按钮,但我不确定如何解决这个问题。 由于没有标题,菜单栏位于框架顶部。

那么,我是继承 wx.MenuBar() 并在那里做一些愚蠢的事情,还是强行按下按钮?操作系统甚至会让我对菜单栏进行锻炼吗?

我希望以前有人做过类似的事情,这样我就不必在迷雾中跌跌撞撞。欢迎简短的例子。如果它们是跨平台友好的,那么它们非常受欢迎。

【问题讨论】:

Menubar 是专门用于菜单的,我想你在找wx.ToolBar。见wx.Frame.CreateToolBar()wxpython.org/Phoenix/docs/html/… 我不知何故知道这一点。 :D 1. 我没有放置水平工具栏的地方 & 2. 哦,拜托,这看起来如何告诉我。我需要它看起来好像窗口的右上角有标准控件。 工具栏可以是垂直的!但是,在 Linux 上,系统菜单和关闭和最小化按钮不会在全屏模式下消失,因此我无法复制您的环境,因为我拒绝在我的机器上放置“windows”。 你真聪明。然而,我没有选择,所以我被 Mac、Linux 和 Windows 多重引导所困。总是切换操作系统可能会令人困惑,相信我。您开始在错误的操作系统上使用错误的命令,并想知道,哦,为什么现在这不起作用!然后你意识到这是错误的操作系统并且觉得自己像个傻瓜。和往常一样,Windows 是最无用的,也是最容易出错的。我认为框架样式 wx.NO_CAPTION 应该在默认情况下不会丢失标题的平台上有所帮助。可以试试吗? 【参考方案1】:
import wx

class NoCaptionFrame(wx.Frame):
    def __init__(self):
        no_caption = wx.RESIZE_BORDER
        wx.Frame.__init__(self, None, title="No Caption", style=no_caption)
        toolbar = self.CreateToolBar(style=wx.TB_VERTICAL)
        quittool1 = toolbar.AddLabelTool(wx.ID_ANY, 'Quit', wx.Bitmap('exit.png'))
        quittool2 = toolbar.AddLabelTool(wx.ID_ANY, 'Quit', wx.Bitmap('exit.png'))
        quittool3 = toolbar.AddLabelTool(wx.ID_ANY, 'Quit', wx.Bitmap('exit.png'))
        toolbar.Realize()
        menubar=wx.MenuBar()
        first=wx.Menu()
        second=wx.Menu()
        first.Append(1,"New Window","This is a new window")
        first.Append(2,"Open...","Open A New Window")
        menubar.Append(first,"File")
        menubar.Append(second,"Edit")
        self.SetMenuBar(menubar)
        self.Bind(wx.EVT_TOOL, self.OnQuit, quittool1)
        self.Show()

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

if __name__ == "__main__":
    app = wx.App()
    frame = NoCaptionFrame()
    app.MainLoop()

【讨论】:

是的,但是这里没有菜单栏。只有一个工具栏。现在,如果你确实有一个,那么事情就会开始变得糟糕。例如,我刚刚意识到菜单栏不被认为是在一个框架内。坐标系不包括它,所以没有希望只是将某些东西推到它上面。工具栏,无论其方向如何,都低于菜单栏级别。 添加了一个菜单栏,至少在 Linux 下它看起来不错。因此,要么 Windows 正在做一些完全不同的事情,要么我不理解你的问题,要么你没有充分解释你的问题。无论您对空间有多大限制,控件都会在某个地方占用空间。

以上是关于如何向 wx.MenuBar() 添加一个按钮?的主要内容,如果未能解决你的问题,请参考以下文章

在Eclipse WindowBuilder中向按钮添加图标

wxpython参数解析

如何向子视图属性 Swift 添加操作? [复制]

向 UIScrollView 添加多个子视图

如何在gridview里添加一列详细信息

如何在 xcode 的 MPMoviePlayerController 中添加下一个/上一个按钮/控件?