Frage

Ich habe eine wx.Frame, bei dem ein Haupt wx.Panel dort mit mehrer Widgets innerhalb davon. Ich mag eine Schaltfläche in ein „Hilfefenster“, um zu bewirken zu kommen. Dieser Hilfe-Panel wäre wahrscheinlich ein wx.Panel sein, und ich will es den gesamten Haupt wx.Panel (ohne die Menüleiste des wx.Frame) zu überlagern. Es soll eine Art Schließen-Schaltfläche auf der Hilfe-Taste, die es wieder verschwinden werden.

Was ist ein guter Weg, dies zu erreichen? Ich habe in wx.Notebook aussehen, aber nicht einen Weg, um es nicht auf die Registerkarten zeigen.

gefunden

Beachten Sie, dass ich möchte nicht jedes Mal die Hilfe-Panel zerstören und neu erstellen der Benutzer schließt und öffnet es. Ich will es nur versteckt werden

War es hilfreich?

Lösung

Es gibt mehrere Möglichkeiten

a) Sie können eine eigene Kindertafel, erstellen und gleiche Größe und Position bei 0,0 unter dem Top alle Kind-Widgets machen. keine Notwendigkeit, es zu zerstören es nur Show / Hide dies auch mit übergeordneten Rahmen passt die Größe

b) popup eine wx.PopupWindow oder abgeleiteten Klasse und Ort und Größe es an den richtigen Standort

, um in ein vorschlagen) ist hier ein Beispiel, in dem alle Bedienelemente in das Panel gesetzt werden Sizer, als separate Hilfe cntrl erstellt wird, die von Taste ein- / ausgeblendet werden können, aber Sie können eine benutzerdefinierte cntrl schaffen, die sich versteckt auf Klick schließen

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top