Seite 1 von 1

Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 15:56
von red | Ali
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

Re: Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 16:07
von __deets__
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.

Re: Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 16:14
von red | Ali
__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()..

Re: Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 16:19
von __deets__
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.

Re: Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 16:20
von __blackjack__
@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.

Re: Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 16:33
von red | Ali
__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

Re: Variablen aus einer Funktion in einer anderen Frunktion verwenden

Verfasst: Montag 21. Dezember 2020, 17:08
von __blackjack__
@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.