String von Entry bekommen

Fragen zu Tkinter.
Antworten
Koque
User
Beiträge: 5
Registriert: Samstag 9. Mai 2020, 11:36

Hey!
Ich bin recht unerfahren Python und erst recht was Tkinter angeht. Ich möchte in Python einen String von einem Entry an eine andere Datei übergeben. Der Nutzer soll seine Message eingeben können und mit klicken eines Buttons soll diese eingegebene Message dann abgespeichert werden, damit ein andere Python Datei über Import diese Message weiternutzen kann. Nun bin ich auf das Problem gestoßen, dass ich nicht auf die Variabel in meiner Funktion zugreifen kann, aber diese auch nicht richtig ausgeben kann.
Mein Ansatz war es die Variabel als global zu kennzeichen.

Hier ist was ich zurzeit habe:

Code: Alles auswählen

from tkinter import filedialog
from tkinter import *

window = Tk()
window.title("Message")

e1 = Entry(window)
e1.grid(row=0, column=1)

def button_action():
        global a
        a = e1.get()
        select_label = Label(window, text=e1.get())
        select_label.grid(row=1, column=1)

select_button = Button(window, text = "Click here!", command=button_action)

select_button.grid(row=0, column=3)

window.mainloop()
Hat wer eine Idee wie ich das umsetzen kann oder ist das ganze einfach nur Käse?

Vielen dank im Vorraus!
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Import ist falsch. Global ebenso.
Ich sehe auch keine andere Datei?
Sternchenimporte sollte man nicht verwenden und auch keine neuen Labels beim Druch auf einen Button erzeugen.
Variablen übergibt man anderen Funktionen per Argument. Da ist es auch egal, ob die Funktion in der selben oder in einer anderen Datei ist.
Koque
User
Beiträge: 5
Registriert: Samstag 9. Mai 2020, 11:36

Sirius3 hat geschrieben: Samstag 9. Mai 2020, 13:53 Import ist falsch. Global ebenso.
Ich sehe auch keine andere Datei?
Okay, ich habe es ein bisschen verbessert:
File1:

Code: Alles auswählen

from tkinter import filedialog
from tkinter import *
Import File2

window = Tk()
window.title("Message")

e1 = Entry(window)
e1.grid(row=0, column=1)

def button_action():
        global a
        a = e1.get()
        select_label = Label(window, text=e1.get())
        select_label.grid(row=1, column=1)
        File2

select_button = Button(window, text = "Click here!", command=button_action)

select_button.grid(row=0, column=3)

window.mainloop()
File2:

Code: Alles auswählen

Import File1

print(file1.a) #Also die Variable a aus der Funktion in File1
Vielleicht kannst du mir jetzt helfen oder einen passenden Link zu einer kurzen Hilfe schicken? :D
Benutzeravatar
__blackjack__
User
Beiträge: 14087
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Koque: Import mit grossem "i" ist noch mal ”fälscher” als überhaupt so einen zirkulären Import zu machen. Wenn Du das Bedürfnis hast das sich zwei Module gegenseitig importieren machst Du was falsch. Dann gehören die so eng zusammen, dass das alles in ein Modul gehört, oder man hat Gemeinsamkeiten die in ein drittes Modul ausgelagert werden sollten.

Auf Modulebene steht normalerweise nur Code der Konstanten, Funktionen, und Klassen definiert. Code der was anderes tut gehört mindestens in Funktionen. Das heisst der Code der etwas mit der Eingabe macht, gehört in eine Funktion in das zweite Modul, und die ruft man dann mit dem eingegebenen Wert aus dem Callback für den Button-Click auf und übergibt die Eingabe als Argument.

IMHO sollte man nicht mit GUIs anfangen sondern erst einmal mit den Grundlagen. Funktionen, Klassen, Methoden sollte man IMHO können bevor man sich dann noch die Komplexität und ereignisbasierte Programmierung aus GUIs dazu packt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten