Hallo,
bin vor kurzem neu in Python eingestiegen, deswegen eine Frage, die euch vermutlich nicht besonders herausfordert
Ich schreibe grad ein kleines Rechnenprogramm in einer GUI. Am Ende wird in einem Label die Rechenlösung kurz bewertet (zB, die Kraft ist zu groß / zu klein...). Je nach dem welche Lösung rauskommt, wird halt das eine oder ein anderes Label angezeigt. Jetzt habe ich ein Haufen von Labels, die bei jedem Rechendurchgang (Buttonklick) wieder gelöscht werden sollen, auch wenn sie teilweise noch gar nicht extistieren (weil der Fall für die spezielle Antwort noch nciht vorkam).
Meine Idee war: Ich versehe jedes dieser Labels mit einem Tag und sage zu Anfang meiner Buttonfunktion, dass alle Labels mit dem Tag gelöscht werden sollen.
Funktioniert das so? oder anders? Und wie?
Danke
Labels löschen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wieso hast Du denn nicht nur *ein* Label und setzt von diesem den jeweiligen Text? Die GUI sollte ja möglichst unabhängig von der restlichen Programmlogik sein; insofern bietet es sich doch an, den spezifischen Text anhand des Ergebnis zu holen und in einem Label anzuzeigen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Jap, gute Idee und sofort umgesetzt. Jetzt ist also das ganze auf ein Label beschrängt.
Nur funktioniert das Löschen des alten Labels bei mir noch nicht
Ich habe in der Buttenfunktion folgendes:
Für den ersten Durchlauf kann er noch kein Label löschen, da noch keins existiert (->except), danach wir das Label gelöscht und ein neues erstellt. So war zumindest mein Gedankengang Das funktioniert bei mir noch nicht
Nur funktioniert das Löschen des alten Labels bei mir noch nicht
Ich habe in der Buttenfunktion folgendes:
Code: Alles auswählen
def berechnen():
...
...
try:
l1.grid_remove()
l1 = Label(textvariable=text)
l1.grid(row=12,column=0,columnspan=8,sticky="w")
except:
l1 = Label(textvariable=text)
l1.grid(row=12,column=0,columnspan=8,sticky="w")
Zuletzt geändert von Hyperion am Donnerstag 2. Januar 2014, 12:22, insgesamt 1-mal geändert.
Grund: Code in Python-Code Block gesetzt.
Grund: Code in Python-Code Block gesetzt.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wieso willst Du denn das *Label* löschen? Du willst doch nur den Text des Labels ändern. Dazu musst Du Dir das Label-Objekt irgend wie merken (evtl. als Attribut Deiner GUI-Klasse, falls Du eine verwendest), um darauf bei einer bestimmten Aktion zugreifen zu können.
Kleine Anmerkung: Verwende *nie* ein blankes ``except``! Fange nur spezielle Exceptions ab, die Du an einer Stelle erwartest und die Du irgend wie behandeln möchtest.
Bitte setze in Zukunft Deinen Code in Python-Code-Blöcke; dafür gibt es einen speziellen Button im Editor-Fenster.
Kleine Anmerkung: Verwende *nie* ein blankes ``except``! Fange nur spezielle Exceptions ab, die Du an einer Stelle erwartest und die Du irgend wie behandeln möchtest.
Bitte setze in Zukunft Deinen Code in Python-Code-Blöcke; dafür gibt es einen speziellen Button im Editor-Fenster.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Also mit jedem Buttonklick erzeugt mein Programm ein neues Label mit einem variablen Text. Ist der neue Text kürzer als der alte, sieht man das Ende des alten Textes. Deswegen dachte ich, dass ich das alte Label lösche, bevor ich ein neues erzeuge.
Besser wäre also den Text des vorhandenen Labels zu verändern? Gibt es irgendeine Methode "Label.ändere Text" die das durchführt?
(bei GUI-Klassen bin ich wahrscheinlich noch nicht, deswegen suchte ich nach einer Lösung, die ich mit jetzigem Stand durchführen kann)
Besser wäre also den Text des vorhandenen Labels zu verändern? Gibt es irgendeine Methode "Label.ändere Text" die das durchführt?
(bei GUI-Klassen bin ich wahrscheinlich noch nicht, deswegen suchte ich nach einer Lösung, die ich mit jetzigem Stand durchführen kann)
@loganX: Ja, so eine Methode gibt es. Es gibt sogar zwei Wege das zu erreichen (ohne zusätzliche Objekte).
@loganX: ``label.config(text='neuer text')`` oder ``label['text'] = 'neuer text'``. Damit kann man auch so ziemlich alles andere ändern was Tk als „options” bei einem Widget bezeichnet. Beim Methodenaufruf kann man auch mehr als eine Option ändern.