wxPython: wxPanel killen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

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:
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Wurde den Child Controls bei der Erstellung das Panel als Parent übergeben?
2bock_not_logged

Ja, ist geschehen. :lol:
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

:?:
Ö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
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:
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:
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Aha. Hut ab! :lol:
Ich dachte genau das wär Dein Problem, dass es bei Dir eben nicht so geht...
Bild
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. ;-)
Antworten