.get () geht nicht

Fragen zu Tkinter.
Antworten
irgendwer008
User
Beiträge: 1
Registriert: Donnerstag 11. Juli 2019, 18:16

ich habe schon mehrere Beiträge in diesem Forum dazu gelesen, aber keiner hilft mir weiter:
wenn ich print(str(ENname.get())) (o. ä.) mache, kommt '' , obwohl ich etwas eingegeben habe :?: . kann mir jemand helfen?

hier der gesamte Code:

Code: Alles auswählen

from tkinter import *
import random

root = Tk()
root.title('ATD')
root.geometry("500x500")
root.grid()

def listen():
    print(namen)
    print(passwörter)

listen = Button(root, text='listen drucken', command = listen)
listen.pack()

loginfenster = True

def eingabe_aktualisieren():
    eingabename = str(ENname.get())
    eingabepasswd = str(ENpasswd.get())


def login():
    if loginfenster == True:
        LABnewname.pack_forget()
        LABnewpasswort.pack_forget()
        ENnewname.pack_forget()
        ENnewpasswort.pack_forget()
        BUdocreateaccount.pack_forget()
        BUbacktologin.pack_forget()

        LABname.pack()
        LABpasswort.pack()
        ENname.pack()
        ENpasswd.pack()
        BUlogin.pack()
        BUcreateaccount.pack()
        BUremoveaccount.pack()

def logintest():

    eingabe_aktualisieren()

    if namen.count(eingabename) == 0:
        print("kein / falscher Name")
        if passwörter.count(eingabepasswd) == 0:
            print("kein / falsches Passwort")
    else:
        if passwörter.count(eingabepasswd) == 0:
            print("kein / falsches Passwort")

        else:
            if namen.index(eingabename) == passwörter.index(eingabepasswd):
                print("korrekt")




def createaccount():
    LABname.pack_forget()
    LABpasswort.pack_forget()
    ENname.pack_forget()
    ENpasswd.pack_forget()
    BUlogin.pack_forget()
    BUcreateaccount.pack_forget()
    BUremoveaccount.pack_forget()

    LABnewname.pack()
    LABnewpasswort.pack()
    ENnewname.pack()
    ENnewpasswort.pack()
    BUdocreateaccount.pack()
    BUbacktologin.pack()

def docreateaccount():
    if len(ENnewname.get()) <= 4:
        print("to short Name")

    else:
        if len(ENnewpasswort.get()) <= 4:
            print("to short Password")

        else:
            print("account created")
            namen.append(ENnewname.get())
            passwörter.append(ENnewpasswort.get())
            login()

def deleteaccount():
    if namen.count(eingabename) == 0:
        print("wrong /no Name")

        if passwörter.count(eingabepasswd) == 0:
            print("wrong /no Password")

    else:
        if passwörter.count(eingabename) == 0:
            print("wrong /no Password")

        else:
            if namen.index(eingabename) == passwörter.index(eingabepasswd):
                print("Akkount deletet")
                namen.remove(eingabename)
                passwörter.remove(eingabepasswd)


namen = ["max"]

passwörter = ["mustermann1234"]


Flabel = Label(root, text='That was wrong')

LABname = Label(root, text='Name:  ')
LABpasswort = Label(root, text='Passwort:  ')
LABnewname = Label(root, text='Neuer Name:  ')
LABnewpasswort = Label(root, text='Neues Passwort:  ')

BUlogin = Button(root, text='Login', command = logintest)
BUremoveaccount = Button(root, text='Akkount löschen', command = deleteaccount)
BUcreateaccount = Button(root, text='Neuer Account', command = createaccount)
BUdocreateaccount = Button(root, text='Erstelle Account', command = docreateaccount)
BUbacktologin = Button(root, text='zurück', command = login)

ENnewname = Entry(root)
ENnewpasswort = Entry(root)
ENname = Entry(root)
ENpasswd = Entry(root)

eingabename = str(ENname.get())
eingabepasswd = str(ENpasswd.get())

eingabe_aktualisieren()
login()

root.mainloop()


Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@irgendwer008: Du mußt noch viel über Python, Funktionen, Namensräume, etc. lernen, bevor Du Dich mit GUI-Programmierung weiter beschäftigen solltest. Funktionen sind keine Sprungmarken, GUI-Programme laufen nicht linear ab.

Generell ist es gut, keine *-Importe zu benutzen, keine globalen Variablen zu benutzen, nicht Definitionen und ausführbaren Code zu mischen. Definiere für GUIs Klassen. Halte dich an die Namenskonvention, keine Abkürzungen benutzen. Statt ein in einem Fenster alle Elemente auszutauschen, ist es besser zwei Fenster/Frames zu benutzen.

`listen` wird zweifach verwendet. `eingabe_aktualisieren` macht effektiv nichts. Statt count solltest Du den in Operator benutzen.
Statt Name und Passwort in zwei getrennten Listen zu speichern, ist die bessere Datenstruktur ein Wörterbuch; natürlich kein globales. Statt zu verraten, dass das Passwort nicht zum Benutzer passt, aber zu einem anderen, solltest Du so wenig Informationen rauszurücken wie möglich.
Antworten