Variablen aus einer Funktion in einer anderen Frunktion verwenden

Fragen zu Tkinter.
Antworten
red | Ali
User
Beiträge: 34
Registriert: Samstag 31. Oktober 2020, 16:39

Hallo,
ich habe eine kleiner Frage zu Tkinter. Und zwar habe ich vor 2 Tagen mit Python angefangen, habe bisher noch nicht einmal geschlafen. Habe die "einfachen" Sachen eigentlich drauf. Doch es gibt immer ein paar Kleinigkeiten, welche ich nicht verstehe.
Also... Ich habe vor ein paar Minuten angefangen, ein simples Loginsystem mit Python genauergesagt mit Tkinter zu erstellen. Nun habe ich eine Funktion erstellt, welche erstmal das Fenster gestaltet. Darin habe ich auch einen "Entry" mit eingebaut. Aus diesem Entry möchte ich aber aus einer anderen Funktion die Werte entnehmen. Ich habe es bereits mit Return und ""globalen" Variablen versucht, welches nicht funktionierte. Außerdem habe ich herausgefunden, dass man wenn nur selten mit globalen Variablen arbeitet. Könnte wer mir bitte sagen, welche Return Funktion, oder was ich einbauen muss, damit ich in einer anderen Funktion, auf Variablen, in einer noch anderen Funktion zugreifen kann?
Danke für eure Antworten!
from tkinter import *

window1 = Tk()

Code: Alles auswählen



def wndw_dsgn():
    window1.geometry("500x350")
    window1.title("Login")
    label1 = Label(window1, text="Enter your username")
    label1.pack()
    username = Entry(window1)
    username.pack()
    label2 = Label(window1, text="Password:")
    label2.pack()
    password = Entry(window1, show='*')
    password.pack()
    send = Button(window1, text="Finished", padx=50, pady=10, command=get_us_pw)
    send.pack()
    global username_get
    global password_get
    username_get = username.get()
    password_get = password.get()
    username.bind("<Return>", get_us_pw)



def get_us_pw(*args):
    print("Enter gedrückt " + username_get)




wndw_dsgn()
window1.mainloop()


LG,
Ali
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nicht schlafen ist nicht so gut. Programmieren braucht einen wachen geist.

Wie dem auch sei - vergiss sofort, dass es global gibt. Globale Variablen sind eine Seuche, die schneller ausser Kontroller geraet als unsere Pandemie gerade. Wenn man GUI-Programmierung betreibt ist objektorientierte Programmierung zwingend.

Wenn du einen Wert aus einem Entry haben willst, dann musst du an der Stelle, wo du den haben willst, mein_entry.get() aufrufen. Daran fuehrt kein Weg vorbei - es gibt keine Implizite "Belegung" einer Variablen wie mein_entry_get, die das magisch fuer dich macht.
red | Ali
User
Beiträge: 34
Registriert: Samstag 31. Oktober 2020, 16:39

__deets__ hat geschrieben: Montag 21. Dezember 2020, 16:07 Nicht schlafen ist nicht so gut. Programmieren braucht einen wachen geist.

Wie dem auch sei - vergiss sofort, dass es global gibt. Globale Variablen sind eine Seuche, die schneller ausser Kontroller geraet als unsere Pandemie gerade. Wenn man GUI-Programmierung betreibt ist objektorientierte Programmierung zwingend.

Wenn du einen Wert aus einem Entry haben willst, dann musst du an der Stelle, wo du den haben willst, mein_entry.get() aufrufen. Daran fuehrt kein Weg vorbei - es gibt keine Implizite "Belegung" einer Variablen wie mein_entry_get, die das magisch fuer dich macht.
Hi, ich habe doch username_get = username.get() geschrieben. Also der Wert aus dem Entry in dieser Variable gespeichert. Und diese Variable möchte ich nun in einer anderen Funktion verwenden. Verstehst du, wie ich es meine?

EDIT: Ich habe meinen Entry ja "username" genannt. Also username.get()..
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe schon gesehen, dass du das hingeschrieben hast.

Aber nur weil du mal an einer Stelle irgendwo diesen Ausdruck hingeschrieben hat, der dann den Wert des Entry ZU DEM ZEITPUNKT beinhaltet hat, heisst das eben nicht, dass spaeter, wenn der Wert in Entry sich geaendert hat, dieser Wert sich automagisch erneuert hat. So funktioniert Python einfach nicht.

Du musst in deiner Ereignis-Rueckruffunktion eben nochmal mein_entry.get() aufrufen. Daran geht kein Weg vorbei. Und du solltest eine Klasse benutzen, und dann

Code: Alles auswählen

self.passwort.get()
statt der globalen Variablen nehmen.

Und bitte nicht den kompletten Post vorher zitieren, der steht da ja schon, kann jeder lesen. Das ist also redundant.
Benutzeravatar
__blackjack__
User
Beiträge: 14084
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@red | Ali: Ws sll dnn btt `wndw_dsgn` bdtn? Msst D Vkl xtr bzhln?

Ja Du hast `username_get = username.get()` geschrieben. An einer Stelle im Programm wo das `Entry` das an `username` gebunden wurde, gerade nagelneu erstellt wurde und natürlich noch nichts enthält. `username` wird da an die leere Zeichenkette gebunden. Und der Wert ändert sich nicht auf magische Weise wenn der Benutzer *später* in dem `Entry` etwas eingibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
red | Ali
User
Beiträge: 34
Registriert: Samstag 31. Oktober 2020, 16:39

__blackjack__ hat geschrieben: Montag 21. Dezember 2020, 16:20 @red | Ali: Ws sll dnn btt `wndw_dsgn` bdtn? Msst D Vkl xtr bzhln?

Ja Du hast `username_get = username.get()` geschrieben. An einer Stelle im Programm wo das `Entry` das an `username` gebunden wurde, gerade nagelneu erstellt wurde und natürlich noch nichts enthält. `username` wird da an die leere Zeichenkette gebunden. Und der Wert ändert sich nicht auf magische Weise wenn der Benutzer *später* in dem `Entry` etwas eingibt.
Okay danke ^^
Tut mir leid ich bin noch nicht so weit. Ich habe da noch eine letzte Frage zu Klassen:
Zum Beispiel wenn ich wieder einen Entry in einer Klasse habe und ich dann in der nächsten Klasse den Inhalt des Entrys haben möchte. Wie mache ich das? Könntest du mir vielleicht mal ein einfaches Beispiel zeigen? Danke ^^
LG
Benutzeravatar
__blackjack__
User
Beiträge: 14084
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@red | Ali: Wenn Du ein `Entry`-Objekt irgend wo brauchst, dann musst Du es beim Aufruf übergeben. Entweder direkt, oder als Attribut auf einem Objekt das übergeben wird.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten