如何向 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() 添加一个按钮?的主要内容,如果未能解决你的问题,请参考以下文章