Seite 1 von 1

wxPython: wxPanel killen

Verfasst: Mittwoch 18. August 2004, 08:51
von 2bock
Hi Leute. Ich lade nacheinander verschiedene wxPanels in ein wxSplitterWindow. Das nur zu nebenbei Info.

Frage: Wie kill ich ein Panel. Ich dachte ich könnte dies mit Destroy() oder besser noch mit DestroyChildren() realisieren. Aber das klappt nicht so wie ichs mir vorstelle. die wxTextCtrl usw. sind immer noch aktiv.

Was sagt ihr dazu?

Greetz 2bock :wink:

Verfasst: Mittwoch 18. August 2004, 09:25
von Christopy
Wurde den Child Controls bei der Erstellung das Panel als Parent übergeben?

Jepp

Verfasst: Mittwoch 18. August 2004, 09:32
von 2bock_not_logged
Ja, ist geschehen. :lol:

Verfasst: Mittwoch 18. August 2004, 10:38
von Christopy
:?:
Öhm. Ja wie jetzt ;)
Geht's nun, oder lag's nicht daran?

Für alle Fälle mal ein kurzes Beispiel, in dem es funktioniert:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-

from wxPython.wx import *

class DlgTest(wxFrame):
    
    def __init__(self, *args, **kwds):
        kwds["style"] = wxDEFAULT_FRAME_STYLE        
        wxFrame.__init__(self, *args, **kwds)
        self.panel = wxPanel( self, wxNewId() )
        self.btn = wxButton(self.panel, wxNewId(), "Ausgabe")
        self.txtctrl = wxTextCtrl(self.panel, wxNewId() )
        
        sizer_pn = wxBoxSizer( wxHORIZONTAL )
        sizer_pn.Add( self.btn, 0, 0, 0 )
        sizer_pn.Add( self.txtctrl, 0, 0, 0 )                    
        self.panel.SetAutoLayout(1)
        self.panel.SetSizer( sizer_pn )
        sizer_pn.Fit( self.panel )
        self.panel.Layout()
                
        self.SetTitle("Frametest")
        
        self.__do_layout()
        
        EVT_BUTTON( self, self.btn.GetId(), self.OnBtnAusgabe )

    def __do_layout(self):
        sizer_1 = wxBoxSizer(wxHORIZONTAL)
        sizer_1.Add(self.panel, 0, 0, 0)
        self.SetAutoLayout(1)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        sizer_1.SetSizeHints(self)
        self.Layout()
        self.Centre()

    def OnBtnAusgabe(self, event):
        print self.panel
        print self.btn
        print self.txtctrl
        self.panel.Destroy()
        print self.panel
        print self.btn
        print self.txtctrl

Nein so hab ich das schon gemacht.

Verfasst: Mittwoch 18. August 2004, 14:52
von 2bock_not_logged
Danke für Dein Beisipel Christopy.

Nein nein ich hab das schon richtig gemacht. Aber das Problem, warum es bei mir nicht funktioniert, scheint woanders zu liegen. Ich bin jetzt auf der Suche nach dem Problem.

Trotzdem Danke für Deine Antwort.

Jetzt kann ich wenigstens sicher sein, das ich das schon mal richtig gemacht habe.

Greetz from 2bock :wink:

Meine Alternativlösung

Verfasst: Donnerstag 19. August 2004, 09:08
von 2bock_not_logged
Also ich habe das Problem oder so elegant gelöst. Durch den Befehl DestryChildren(), der von der wxWindow Klasse abgeleitet wird, habe ich direkt von "Parent Window" die entsprechenden Panels gekillt.

Ich hoffe das was ich geschrieben habe war verständlich. Fragen bitte ruhig posten.

Bis dann

Greetz from 2bock :wink:

Verfasst: Donnerstag 19. August 2004, 11:28
von Christopy
Aha. Hut ab! :lol:
Ich dachte genau das wär Dein Problem, dass es bei Dir eben nicht so geht...
Bild

Naja. .....

Verfasst: Dienstag 24. August 2004, 10:15
von 2bock_not_logged
Frag nicht wieso, aber ich wollte ursprünglich diverse Objekte einzeln killen. Von einzeln Objekt kam ich dann auf dat ganze Panel und hab gar nicht mehr an Children Destroy gedacht.



Warum elegant lösen, wenns auch kompliziert geht. ;-)