Seite 1 von 1
In einem Label Variablen aktualisieren
Verfasst: Freitag 3. September 2010, 16:01
von ichbinjonathan
Hallo an alle!
Ich bin neu hier und allgemein ziemlicher Anfänger beim Programmieren in Python.
Bevor ich diesen Beitrag schieb, habe ich in vielen anderen Foren und auf vielen anderen Seiten nach einer Lösung gesucht. Vergeblich.
Mein Problem ist folgendes:
Ich möchte eigentlich nur, dass eine Variable, die ich in ein Label geschrieben habe, immer auf das Neueste aktualisiert wird. Am besten gebe ich euch ein Beispiel:
Code: Alles auswählen
from tkinter import*
root=Tk()
eingabe=Entry(root)
eingabe.pack()
def holer():
a=eingabe.get()
return a
b=holer()
but=Button(root,text='Abschicken', command=holer)
but.pack()
textfeld=Label(root, text=b)
textfeld.pack()
root.mainloop()
Was ich eingentlich möchte, ist, dass immer wenn ich auf den Button 'Abschicken' klicke, im Label der Text erscheint, den ich in Entry 'eingabe' geschrieben habe.
Ich muss allerdings feststellen, dass er nur dann überrhaupt einen Text anzeigt, wenn ich wärend ich das Programm schreibe etwa in den Entry eingabe, was dann immer dort stehen bleibt, egal wie sich der Wert von holer() ändert.
Wie schon gesagt, ich bin ein blutiger Anfänger und hoffe, nicht euch die Zeit mit solchen Lapalien zu rauben...
Danke schonmal im Vorraus!
MFG
ichbinjonathan
Re: In einem Label Variablen aktualisieren
Verfasst: Freitag 3. September 2010, 16:04
von BlackJack
@ichbinjonathan: Du musst den Wert in der Funktion in das Label schreiben, die aufgerufen wird, wenn der Button betätigt wird.
Allerdings solltest Du als Anfänger vielleicht erst einmal die Grundlagen lernen und erst mit GUI-Programmierung anfangen, wenn Du entweder objektorientierte Programmierung oder Closures halbwegs beherrscht. Sonst machst Du den zweiten vor dem ersten Schritt.
Re: In einem Label Variablen aktualisieren
Verfasst: Freitag 3. September 2010, 16:40
von ichbinjonathan
Erstmal vielen Dank für die schnelle Antwort!
Wenn ich das richtig vertanden habe, müsste der Code dann so aussehen:
Code: Alles auswählen
from tkinter import*
root=Tk()
eingabe=Entry(root)
eingabe.pack()
def holer():
a=eingabe.get()
return a
but=Button(root,text='Abschicken', command=holer)
but.pack()
textfeld=Label(root, text=a)
textfeld.pack()
root.mainloop()
Meinen Kenntnissen nach kann so etwas garnicht funktionieren, da [a] ja eine lokale Variable in holer() ist (Oder?).
Ich habe es trotzdem ausprobiert und auch da hat es nicht funktioniert (das Label hatte keinen Inhalt).
Im übrigen behersche ich die objektoriente Programmierung recht angemessen. Eigentlich wollte ich mit Tkinter anfangen, um eines meiner Programme, welches nur in IDLE und nur mit von der Tastatur eingegebenen Befehlen lief, graphisch zu machen, um die Bedienung zu vereinfachen. Ich habe mich meistens an der Seite
www.wspiegel.de orientiert, um Tkinter zu lernen, allerdings musste ich feststellen, dass sie sehr Lückenhaft ist.
MFG
ichbinjonathan
Re: In einem Label Variablen aktualisieren
Verfasst: Freitag 3. September 2010, 17:19
von BlackJack
@ichbinjonathan: Nein, so kann das natürlich nicht funktionieren. Die `holer()`-Funktion muss alles das machen, was passieren soll, wenn Du auf den Button drückst. Und das ist ja nicht nur das auslesen aus dem Eingabefeld, sondern eben auch das setzen in das Label. Das ``return`` in der Funktion ist recht sinnfrei. Überleg doch mal wer diese Funktion aufruft, und was der Aufrufer wohl mit dem Rückgabewert machen soll.
Re: In einem Label Variablen aktualisieren
Verfasst: Samstag 4. September 2010, 00:33
von problembär
Du wirst Dich mit OOP vertraut machen müssen, junger Padawan:
Code: Alles auswählen
import tkinter as tk
class TkApp:
def __init__(self):
self.root = tk.Tk()
self.eingabe = tk.Entry(self.root)
self.eingabe.pack()
self.but = tk.Button(self.root, text = 'Abschicken', command = self.holer)
self.but.pack()
self.textfeld = tk.Label(self.root, text = "Start")
self.textfeld.pack()
self.root.mainloop()
def holer(self):
self.textfeld.configure(text = self.eingabe.get())
app = TkApp()
Und hüte Dich vor 'global': 'global' führt zur dunklen Seite: Schneller, leichter erscheint es Dir, doch nicht an Dein Ziel bringen wird es Dich!
Gruß
Re: In einem Label Variablen aktualisieren
Verfasst: Montag 13. September 2010, 23:33
von pythonstarter
problembär hat geschrieben:Du wirst Dich mit OOP vertraut machen müssen, junger Padawan:
Hi, ich bin selbst noch ganz am Anfang und lehne mich vielleicht recht weit aus dem Fenster:
ich kann nachvollziehen, dass OOP für große Projekte sinnvoll ist - aber in diesem Bsp. erkenne ich den Sinn für OOP nicht - oder?
Re: In einem Label Variablen aktualisieren
Verfasst: Dienstag 14. September 2010, 00:14
von BlackJack
@pythonstarter: Also genau *dieses* Beispiel geht noch ohne OOP, aber wenn's nur ein wenig komplizierter wird, kommt man mit Funktionen nicht mehr wirklich aus, bzw. programmiert dann doch letztendlich objektorientiert, denn man bastelt dann zwangsläufig Objekte mit Closures nach. GUIs sind auch das Paradebeispiel für die Anwendung von OOP.
Re: In einem Label Variablen aktualisieren
Verfasst: Dienstag 14. September 2010, 16:49
von problembär
pythonstarter hat geschrieben:problembär hat geschrieben:Du wirst Dich mit OOP vertraut machen müssen, junger Padawan:
Hi, ich bin selbst noch ganz am Anfang und lehne mich vielleicht recht weit aus dem Fenster:
ich kann nachvollziehen, dass OOP für große Projekte sinnvoll ist - aber in diesem Bsp. erkenne ich den Sinn für OOP nicht - oder?
Tatsächlich ist es nicht unmöglich, Tk ohne OOP zu programmieren. Die Perl/Tk-Leute
machen das häufiger. Guck's Dir an, es ist möglich, aber total unübersichtlich und schwierig. Außerdem ruft man innerhalb von Tk sowieso Methoden von Widget-Objekten auf ...
Ich bin eigentlich auch kein großer Freund von OOP, aber wenn's um GUIs geht, macht es die Sache schon viel einfacher. Daher lieber gleich dran gewöhnen!
Gruß