Ersetzen von Widgets

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

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: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
Antworten