wxPython: wxPanel killen

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

wxPython: wxPanel killen

Beitragvon 2bock » Mittwoch 18. August 2004, 08:51

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

Beitragvon Christopy » Mittwoch 18. August 2004, 09:25

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

Jepp

Beitragvon 2bock_not_logged » Mittwoch 18. August 2004, 09:32

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

Beitragvon Christopy » Mittwoch 18. August 2004, 10:38

:?:
Ö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

Nein so hab ich das schon gemacht.

Beitragvon 2bock_not_logged » Mittwoch 18. August 2004, 14:52

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

Meine Alternativlösung

Beitragvon 2bock_not_logged » Donnerstag 19. August 2004, 09:08

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

Beitragvon Christopy » Donnerstag 19. August 2004, 11:28

Aha. Hut ab! :lol:
Ich dachte genau das wär Dein Problem, dass es bei Dir eben nicht so geht...
Bild
2bock_not_logged

Naja. .....

Beitragvon 2bock_not_logged » Dienstag 24. August 2004, 10:15

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. ;-)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder