Ersetzen von Widgets

Fragen zu Tkinter.
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ersetzen von Widgets

Beitragvon Mawilo » Mittwoch 4. Januar 2006, 21:51

Hallo,


ich stehe etwas auf dem Schlauch. Als erstes mal ein Beispielcode:

Code: Alles auswählen

# -*- coding: utf-8 -*-

from Tkinter import *

class Hauptfenster:
    def __init__(self):
        self.root = Tk()
        self.fr01 = Frame(self.root)
        self.fr01.pack(fill=X)
        self.fr02 = Frame(self.fr01)
        self.fr02.pack(fill=X)
        self.lb01 = Label(self.fr02,text='Fenster 1')
        self.lb01.pack()
        self.bu01 = Button(self.fr01,text='Test1',command=self.neuesFenster)
        self.bu01.pack()
        self.bu01.mainloop()

    def neuesFenster(self):
        NeuesFenster(self.fr02)

class NeuesFenster:
    def __init__(self,frame):
        self.frame = frame
        self.en01 = Entry(self.frame,width=10)
        self.en01.pack()
           
if __name__ == '__main__':
    Hauptfenster()


Nun möchte ich, dass beim Aufrufen der Klasse NeuesFenster self.fr02 und self.lb01 der Klasse Hauptfenster mit einem neuen Frame (an der selben Stelle) und mit self.en01 aus der Klasse NeuesFenster ersetzt wird. Mit dem Beispielcode wird self.en01 nur zugefügt.

Hat da jemand einen Tip für mich?

Stephan
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Beitragvon Mawilo » Freitag 6. Januar 2006, 00:48

mmh, ich hab ne Lösung, allerdings keine schöne:

Code: Alles auswählen

# -*- coding: utf-8 -*-

from Tkinter import *

liste = []


class Hauptfenster:
    def __init__(self):
        self.root = Tk()
        self.fr01 = Frame(self.root)
        self.fr01.pack(fill=X)
        self.fr02 = Frame(self.fr01)
        self.fr02.pack(fill=X)
        self.fr03 = Frame(self.fr02)
        self.fr03.pack()
        self.lb01 = Label(self.fr02,text='Fenster 1')
        self.lb01.pack()
        self.bu01 = Button(self.fr01,text='Test1',command=self.neuesFenster)
        self.bu01.pack()
        self.text = 0
        self.bu01.mainloop()

    def neuesFenster(self):
        self.breite += 5
        NeuesFenster(self.fr02,self.lb01,self.breite)

class NeuesFenster:
    def __init__(self,frame,label,breite):
        self.fr02 = frame
        self.lb01 = label
        self.lb01.destroy()
        if liste != []:
            for i in liste:
                i.destroy()       
        self.fr04 = Frame(self.fr02)
        self.fr04.pack()
        liste.append(self.fr04)
        self.en01 = Entry(self.fr04,width=int(breite))
        self.en01.pack()
        self.en01.insert(END,self.en01.winfo_name())
        liste.append(self.en01)
           
if __name__ == '__main__':
    Hauptfenster()


Ich speicher das Frame in einer Liste und lösche dann alles in der Liste.
Nicht schön aber von mir :D

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder