我有一个wx.Frame,其中有一个主要wx.Panel与它内部的几个小部件。 我想在有一个按钮,导致“帮助面板”上来。 这帮助面板可能会是一个wx.Panel,我希望它覆盖整个主wx.Panel(不包括wx.Frame的菜单栏)。 应该有某种形式的帮助按钮,这将使其再次消失关闭按钮。
什么是实现这一目标的好方法? 我看着wx.Notebook但还没有找到一种方法,使之不显示的选项卡。
请注意,我不想破坏和每一个用户关闭和打开它的时候重新创建帮助面板:我只是希望它被隐藏。
我有一个wx.Frame,其中有一个主要wx.Panel与它内部的几个小部件。 我想在有一个按钮,导致“帮助面板”上来。 这帮助面板可能会是一个wx.Panel,我希望它覆盖整个主wx.Panel(不包括wx.Frame的菜单栏)。 应该有某种形式的帮助按钮,这将使其再次消失关闭按钮。
什么是实现这一目标的好方法? 我看着wx.Notebook但还没有找到一种方法,使之不显示的选项卡。
请注意,我不想破坏和每一个用户关闭和打开它的时候重新创建帮助面板:我只是希望它被隐藏。
有几种方法
a)您可以创建自定义子面板,并使其相同的大小和位置在0,0的所有子控件的前列。 没有必要毁坏它只是显示的/它隐藏这也与父框架调整大小
b)中弹出在正确的位置一个wx.PopupWindow或派生类和地点和大小它
这样的建议)这里有一个例子,在那里所有的控制都用分级机放在面板上,作为单独的帮助CNTRL创建可以显示/从按钮隐藏,但你可以创建自己隐藏在单击关闭自定义CNTRL
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.panel = wx.Panel(self)
# create controls
self.cntrlPanel = wx.Panel(self.panel)
stc1 = wx.StaticText(self.cntrlPanel, label="wow it works")
stc2 = wx.StaticText(self.cntrlPanel, label="yes it works")
btn = wx.Button(self.cntrlPanel, label="help?")
btn.Bind(wx.EVT_BUTTON, self._onShowHelp)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(stc1)
sizer.Add(stc2)
sizer.Add(btn)
self.cntrlPanel.SetSizer(sizer)
# create help panel
self.helpPanel = wx.Panel(self.panel)
self.stcHelp = wx.StaticText(self.helpPanel, label="help help help\n"*8)
btn = wx.Button(self.helpPanel, label="close[x]")
btn.Bind(wx.EVT_BUTTON, self._onShowCntrls)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.stcHelp)
sizer.Add(btn)
self.helpPanel.SetSizer(sizer)
self.helpPanel.Hide()
self.helpPanel.Raise()
self.helpPanel.SetBackgroundColour((240,250,240))
self.Bind(wx.EVT_SIZE, self._onSize)
self._onShowCntrls(None)
def _onShowHelp(self, event):
self.helpPanel.SetPosition((0,0))
self.helpPanel.Show()
self.cntrlPanel.Hide()
def _onShowCntrls(self, event):
self.cntrlPanel.SetPosition((0,0))
self.helpPanel.Hide()
self.cntrlPanel.Show()
def _onSize(self, event):
event.Skip()
self.helpPanel.SetSize(self.GetClientSizeTuple())
self.cntrlPanel.SetSize(self.GetClientSizeTuple())
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show()
app.SetTopWindow(frame)
app.MainLoop()