2017-01-28 1 views
1
import tkinter as tk 
from tkinter import simpledialog 

def get_pass(): 

    user_password = simpledialog.askstring("Password Entry", "Enter your password here:") 
    return user_password 

submitButton = tk.Button(content, text="Start", command=get_pass) 

#now I want to work with the password that the user entered. 

Der Benutzer soll auf die Schaltfläche "Start" klicken. Nach dem Anklicken des Buttons erscheint eine tkinter-Message-Box, in der der Benutzer aufgefordert wird, sein Passwort einzugeben. Der Benutzer gibt sein Passwort ein und übermittelt es. Gemäß dem obigen Code wird das Kennwort als Zeichenfolge mit dem Namen user_password zurückgegeben.Wie speichern Sie das Ergebnis eines Befehls einer Schaltfläche in tkinter?

Die Frage ist, wie kann ich verwenden, was der Benutzer eingegeben? Die Schaltfläche speichert den Rückgabewert von Funktionen nicht.

+0

'command =' kann das Ergebnis von 'get_pass()' nicht abrufen, verwenden Sie also 'global', um' user_password' zuzuweisen. – furas

+0

@furas danke, das macht Sinn. Ich bin ein Anfänger, also wäre ich dir dankbar, wenn du mir gezeigt hättest, wie man eine Variable als globale Variable setzt, damit ich sie außerhalb dieser Funktion verwenden kann. –

+0

sehe meine Antwort und Kommentare in Code – furas

Antwort

1

Zuerst müssen Sie submitButton.pack() oder submitButton.grid() hinzufügen, um die Schaltfläche im tk-Fenster anzuzeigen. Die Rückgabe des Benutzerpassworts funktioniert nicht, da Sie dem Passwort nicht den Befehl 'command' zuweisen. Sie können Ihre Funktion etwas wie folgt ändern:

import tkinter as tk 
from tkinter import simpledialog 

def get_pass(): 
    global user_password 
    user_password = simpledialog.askstring("Password Entry", "Enter your password here:") 
    content.destroy() 

content=tk.Tk() 
submitButton = tk.Button(content, text="Start", command=get_pass) 
submitButton.config(height=6, width=25, fg='red') #looks a little nicer 
submitButton.pack() 
content.mainloop() 

#Do stuff with user_password 
#print(user_password) 

, wenn Sie später drucken user_password auf sie das Passwort obwohl die Simple eingegeben zeigen. Das Passwort lautet jetzt user_password.

+0

Das scheint nicht zu funktionieren. Wenn ich nach dem Ausführen der Funktion print (user_password) schreibe, sagt pycharm "NameError: name 'user_password' ist nicht definiert" –

+0

@MauviaModi hier ist der vollständige Code, es wird jetzt funktionieren – abccd

1

command= nicht Wert von get_pass() zurück erhalten, so können Sie global Variable (oder StringVar) verwenden user_password zuzuweisen. Oder verwenden Sie diesen Wert direkt in get_pass(), um das Passwort zu überprüfen, und Sie müssen es nicht zurückgeben.

import tkinter as tk 
from tkinter import simpledialog 

def get_pass(): 
    # inform function to use external/global variable when you use `=` 
    global user_password 

    # `user_password_var` is global variable too 
    # but it doesn't need `global user_password_var` 
    # because it doesn't need `=` to assign value. 

    result = simpledialog.askstring("Password Entry", "Enter your password here:") 

    user_password = result 
    # or 
    user_password_var.set(result) 
    # or 
    if result != '123456': 
     label['text'] = "ERROR: password is incorrect" 
    else: 
     label['text'] = "password is OK" 

# --- main --- 

root = tk.Tk() 

# it creates global variable 
user_password = '' 
# or 
user_password_var = tk.StringVar() 

label = tk.Label(root) 
label.pack() 

submitButton = tk.Button(root, text="Start", command=get_pass) 
submitButton.pack() 

# both variables are empty before `mainloop` 

root.mainloop() 

# both variables have value after `mainloop` 

# print after you exit program 
print(user_password) 
print(user_password_var.get()) 
+0

Bedeutet das, dass der Wert, den der Benutzer eingegeben hat, verfügbar wird erst drucken, nachdem ich das Fenster geschlossen habe? Gibt es keine Möglichkeit, den Wert zu drucken, sobald der Benutzer "Senden" drückt? –

+0

Nein, es bedeutet nur, dass "Hauptschleife" ein Programm startet und "get_pass()" ausführt, wenn Sie auf die Schaltfläche klicken. Vorher ist das 'Hauptschleife'-Fenster noch nicht vorhanden. – furas

+0

Sie können den Wert in 'get_pass()' ausgeben, aber diese Funktion wird nicht vor 'mainloop()', sondern innerhalb von 'mianloop()' ausgeführt – furas

Verwandte Themen