Il existe plusieurs façons
a), vous pouvez créer un panneau enfant personnalisé, et de le rendre même taille et la position à 0,0 parmi les premiers de tous les widgets enfants. pas besoin de détruire seulement Show/Hide il ce redimensionne aussi avec cadre parent
b) popup de classe wx.PopupWindow ou dérivée et le lieu et la taille au moment de l'emplacement correct
afin Suggest dans a) ici est un exemple, où tous les contrôles sont en panneau à l'aide calibreur, comme cntrl d'aide distinct est créé qui peut être montré/caché bouton, mais vous pouvez créer un cntrl personnalisé qui se cache à cliquer près
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()
Je pense peut-être que j'ai utilisé le mot "overlay" incorrectement ... Je veux un wx.Panel qui couvrira le wx.Panel principal, le cachant complètement. J'ai essayé de faire ce que vous avez fait, sauf avec un wx.Panel, mais comment puis-je faire s'ajuste toujours en fonction de la taille de la wx.Frame? –
initial set panel = taille du client frame/ou du panneau interne redéfinir le OnSize (EVT_SIZE) et redimensionner l'aide en fonction de la taille de Frame –
ok j'ai mis à jour l'exemple maintenant, il y a deux panneaux un pour cntrl et un pour l'aide, tant à l'interne peut organiser des Cntrls en utilisant calibreurs, et les deux ont bouton pour passer à un autre panneau, ils resize aussi avec cadre parent, cela signifie qu'il a tout ce que vous avez besoin. Mais comme je l'ai dit il y a plusieurs façons de le faire. –