J'ai trouvé des réponses à cette question mais aucune des réponses n'a fonctionné sur mon programme. J'essaie de valider la variable de nom dans mon code mais ce isalpha()
n'est pas une fonction utilisée dans tkinter
.
Voici mon code pour l'instant:
class newUser:
root.title("Sign Up")
header = Label(root, text = "Sign Up!\n")
header.grid(row = 0, column = 0, sticky = E)
global results
results = False
def getName(): #Getting name of the user
global name
nameX = Label(root, text = "Please enter your name: ")
nameX.grid(row = 1, column = 0, sticky = W)
name = Entry(root)
name.grid(row =1, column = 1)
#name = name.get()
if name.isalpha() and name != "":
name = name
#newUser.getAge()
else:
print("Please ensure you have entered your name. Thank you. ")
newUser.getName()
root.mainloop()
newUser.getName()
J'ai essayé d'utiliser le name.get()
mais cela a créé une boucle sans fin. Des idées?
isalpha()
est une fonction intégrée des str
objets. L'appel isalpha()
à name
, qui a été défini comme étant un tkinter.Entry
objet, lèvera une exception car tkinter.Entry
n'a pas une telle fonction. Bien que vous ayez raison d'essayer d'utiliser la get()
fonction, qui est une fonction d' tkinter.Entry
objets et renvoie un str
qui prend en charge les isalpha()
appels, votre implémentation est un peu décalée.
Vous entrez dans une récursion car name.get()
retourne immédiatement une chaîne qui échoue au conditionnel sur la name != ""
vérification, ce qui fait tomber l'interpréteur Python dans la else
clause catch-all qui appelle newUser.getName()
, la fonction dans laquelle nous étions déjà et le processus se répète jusqu'à ce que vous dépassiez la récursivité maximale de Python profondeur. Vous ne souhaitez pas appeler get()
l' tkinter.Entry
objet immédiatement car cela ne laisse pas le temps à l'utilisateur de saisir quoi que ce soit. Au lieu de cela, get()
doit être appelé après qu'un événement s'est produit, tel qu'un bouton d'envoi pressé.
Essayez plutôt quelque chose comme ce qui suit:
import tkinter as tk
root = tk.Tk()
class NewUser:
def __init__(self):
self.name = None
root.title("Sign Up")
self.headerLabel = tk.Label (root, text = "Sign Up!\n")
self.nameLabel = tk.Label (root, text = "Please enter your name: ")
self.nameField = tk.Entry (root)
self.submitButton = tk.Button(root, text = "Submit", command = self.saveName)
self.headerLabel.grid (row = 0, column = 0, columnspan = 2)
self.nameLabel.grid (row = 1, column = 0, sticky = "W")
self.nameField.grid (row = 1, column = 1)
self.submitButton.grid(row = 2, column = 0, columnspan = 2, sticky = "EW")
def saveName(self):
name = self.nameField.get()
if name.isalpha() and name != "":
self.name = name
print("Name saved: {}".format(self.name))
else:
print("Please ensure you have entered your name. Thank you.")
user = NewUser()
root.mainloop()
Ce code générera la fenêtre suivante:
À ce stade, si vous appuyez sur le Submit
bouton, name
sera une chaîne vide et échouera la name != ""
comparaison. Par conséquent, ce qui suit est imprimé sur la console:
Please ensure you have entered your name. Thank you.
Cependant, si vous entrez votre nom, en supposant que vous n'incluez que des caractères alpha comme ceci:
Ce qui suit est imprimé sur la console lorsque vous appuyez sur Submit
:
Name saved: Erick
Et le nom enregistré est désormais accessible via la self.name
variable membre de notre NewUser
classe.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots