Seite 1 von 1
Reihenfolge
Verfasst: Donnerstag 12. Januar 2023, 23:39
von norgsmen
Hallo Community,
es geht um folgenden Code:
Code: Alles auswählen
import tkinter as tk
master = tk.Tk()
master.geometry("250x250")
button_list = {}
language = ["Python", "C", "C#"]
entry_lang = tk.Entry(master)
entry_lang.pack(pady=20)
def text_updation(language):
entry_lang.delete(0, tk.END)
entry_lang.insert(0, language)
for i in language:
def action(x=i):
return text_updation(x)
button_list[i] = tk.Button(master, text=i, command=action)
button_list[i].pack()
tk.mainloop()
um genau zu sein:
Code: Alles auswählen
def text_updation(language):
entry_lang.delete(0, tk.END)
entry_lang.insert(0, language)
Wenn ich nämlich
entry_lang.delete nach unten und
entry_lang.insert nach oben verschiebe, dann wird der Text auf dem Entry nicht mehr angezeigt. Aber spielt die Reihenfolge wirklich so eine große Rolle? Ich meine
tk.mainloop() ist doch sowieso die ganze Zeit am Laufen und prüft, ob irgendwelche Benutzereingaben getätigt werden.
Danke!
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 06:06
von sparrow
Kannst du mal bitte erklären, was jede der beiden Zeilen macht? Dann sollte recht schnell klar werden, dass eine getauschte Reihenfolge nicht zielführend sein kann.
Und natürlich werden Anweisungen in einer Funktion immer sequntiell abgearbeitet. Bei GUI-Programmierung muss man nur davon ausgehen, dass diese eventbasiert aufgerufen werden.
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 08:48
von Sirius3
Funktionen werden nach Tätigkeiten benannt, "updation" ist aber keine Tätigkeit. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen, `entry_lang` kommt aber aus dem Nichts.
Man definiert keine Funktionen innerhalb von for-Schleifen. Statt dessen kannst Du in Deinem Fall functools.partial benutzen.
`i` ist der bescheuertste Name für eine `language`. Mit `i` assoziiert man immer einen Index. `button_list` ist gar keine Liste, deshalb sollte man in Variablennamen keine Datentypen schreiben, weil die im Zweifel falsch sind oder werden.
Code: Alles auswählen
import tkinter as tk
from functools import partial
LANGUAGES = ["Python", "C", "C#"]
def update_text(language_entry, language):
language_entry.delete(0, tk.END)
language_entry.insert(0, language)
def main():
master = tk.Tk()
language_entry = tk.Entry(master)
language_entry.pack(pady=20)
buttons = {}
for language in LANGUAGES:
button = tk.Button(master, text=language, command=partial(update_text, language_entry, language))
button.pack()
buttons[language] = button
master.mainloop()
if __name__ == "__main__":
main()
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 13:55
von norgsmen
@sparrow Die erste Zeile löscht was vom Entry und die zweite Zeile fügt etwas hinzu. Deshalb habe ich
anfangs nach oben gepackt, weil wenn ich auf einen Button drücke soll, ja auch zuerst etwas hinzugefügt werden statt gelöscht. Irgendwie ist es noch nicht ganz einleuchtet mit der Reihenfolge.
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 14:04
von __deets__
Wenn ich dir sage "stell diese neuen Teller auf den Tisch", und danach sage "raeume *alle* Teller vom Tisch", wieviele Teller sind dann auf dem Tisch?
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 15:11
von norgsmen
@__deets__ Ja null haha, aber ich verstehe leider nicht wirklich den Zusammenhang mit der Funktion...
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 15:38
von Sirius3
Tisch = entry_lang
Teller = language
insert = stellen
delete = abräumen
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 17:52
von norgsmen
Irgendwo hat sich ein mieser Denkfehler eingeschlichen... Naja ich hätte jedenfalls noch eine andere Frage und zwar wenn ich
eine nornamle Liste zuweise [ ] dann bekomme ich diesen fehler:
TypeError: list indices must be integers or slices, not str
Wie kann es aber sein das button_list {} die Werte: "Python", "C", "C#" speichern kann? Ist es nicht so, dass die Werte in einem Dictionary immer aus einem Schlüssel und einem Wert bestehen?
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 18:14
von sparrow
Zeig den Code, den du ausführst und die vollständige Fehlermeldung, die der Code wirft.
Erklärungen lassen zu viel Spielraum.
Re: Reihenfolge
Verfasst: Freitag 13. Januar 2023, 18:45
von __blackjack__
@norgsmen: Ja, die Elemente in einem Wörterbuch bestehen immer aus Schlüssel und Wert. Nur die Werte "Python", "C", und "C#" kann man neben einer Liste auch in einem `set()` speichern.
Re: Reihenfolge
Verfasst: Montag 16. Januar 2023, 15:45
von norgsmen
/erledigt
Danke für die ganzen Antworten