Python Wert aus Entryfenster wird nicht in Label dargestellt

Fragen zu Tkinter.
Antworten
Duardo
User
Beiträge: 54
Registriert: Mittwoch 2. Juli 2014, 16:56

Hallo, in meinem Programm kann man etwas in ein Entryfenster eingeben und es mit Knopfdruck in einem Label wieder ausgeben. Das Label ist da aber der Wert aus dem Entryfenster nicht. Was mache ich falsch? Schnonmal Danke im voraus! :) Hier der Code:

Code: Alles auswählen

# -*- coding: cp1252 -*-
import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        
        self.state("zoomed")

        container= tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=2)
        container.grid_columnconfigure(0, weight=1)

        self.frames={}
        for F in (fenster, fensta):
            frame= F(container, self)
            self.frames[F]=frame
            frame.grid(row=0, column=0, sticky="nsew")
            frame.pack_propagate(0)

        self.show_frame(fenster)

    def show_frame(self, c):
        frame=self.frames[c]
        frame.tkraise()

class fenster(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        start=tk.Label(self, text="start")
        start.pack()

        button=tk.Button(self, command=lambda: controller.show_frame(fensta))
        button.pack()

class fensta(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.config(bg="lightgreen")
        
        label1=tk.Label(self, text="Wort1")
        label1.pack()
        wort1auf=tk.Entry(self)
        wort1auf.pack()
        
        def ok():
            label.pack()
            
        def wortauswahl():
            label1.pack()
            wort1auf.pack()
            button1.forget()
            label.forget()
      
        def voran():
            label1.forget()
            wort1auf.forget()
            button1.pack()
            label.pack()
            
        label=tk.Label(self, text=wort1auf.get())
        label.forget()
        
        button1=tk.Button(self, text="OK", command=ok)  #wenn man hier drückt sollte das label mit dem inhalt aus dem entryfenster erscheinen
        button1.forget()

        voran=tk.Button(self, text="Voran", command=voran)
        voran.pack()
        
if __name__== "__main__":
    app=SampleApp()
    app.mainloop()
BlackJack

@Duardo: Du musst Dir mal klar machen wann das Label erstellt wird und was das Entry zu *dem* Zeitpunkt enthält, also was ein `get()` *dann* als Ergebnis liefert.
Duardo
User
Beiträge: 54
Registriert: Mittwoch 2. Juli 2014, 16:56

@BlackJack: Wenn ich ehrlich bin hilft mir das nicht weiter :?
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

Duardo hat geschrieben:@BlackJack: Wenn ich ehrlich bin hilft mir das nicht weiter :?
Nun ja,
schau doch zuerst einmal, wann dem "text"-Parameter des Labels "label" ein Wert zugewiesen wird. Einmal. Einmal wird beim Erstellen des Labels "wort1auf.get()" aufgerufen und der Inhalt (nichts) wird übergeben. Wie gesagt, nur einmal.
Okay, du willst also, dass der Text im Label erscheint, wenn "button1" gedrückt wird. Da liegt es nahe, das in der bereits vorhandenen "ok"-Methode zu machen. Und das ist auch ziemlich einfach. Insgesamt also:

Code: Alles auswählen

def ok():
    label.pack()
    label.configure(text=wort1auf.get())
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
Duardo
User
Beiträge: 54
Registriert: Mittwoch 2. Juli 2014, 16:56

@Schorlem: Vielen Dank das war sehr hilfreich! :D
Antworten