私は、ウィンドウを表示し、パスワードidsにユーザーがデータベースに保存されているかどうかを確認する小さなプログラムを作成しました。パスワードが正しい場合は、True
のmdp_valide
というブール値(英語の「password_is_valid」)に影響し、前にはFalse
でしたが、接続のウィンドウが破棄されます。この値を変更する関数なので、関数の先頭にglobal
ステートメントを使用しました。その後Pythonでのグローバル変数の問題
while 1:
mdp_valide, utilisateur_en_cours = fenetre_connection(False, None)
print ('in the main', mdp_valide, utilisateur_en_cours)
if not mdp_valide:
sys.exit()
else :
lancer_messagerie(utilisateur_en_cours)
、機能:しかし、それはウィンドウを閉じたときに、値mdp_valide
が戻っFalse
にあるここでは、
まず、他の関数を呼び出します、メインプログラムを理解するのに役立ついくつかのコードですこれは動作していない:
def fenetre_connection (mdp_val, utilisateur):
mdp_valide = mdp_val
utilisateur_en_cours = utilisateur
root_co = Tk()
# .... Lots of stuff
def verification():
mdp_co = mot_de_passe.get()
global mdp_valide
global utilisateur_en_cours
if mdp_co == recuperer_donnee_utilisateur (identifiant_utilisateur_co, 'mot_de_passe'): # check if the password is the one of the database
print ('condition checked')
mdp_valide = True
utilisateur_en_cours = identifiant_utilisateur_co
print ("before destroying : ", mdp_valide, utilisateur_en_cours)
root_co.destroy()
print ("after destroying : ", mdp_valide, utilisateur_en_cours)
else:
return 1
Button(Frameboutons_co, text="Valider", font='Cambria', command = verification).pack(side=RIGHT) #Bouton qui verifie la validité du pseudo et du mot de passe
root_co.mainloop()
print ('before return : ', mdp_valide)
return mdp_valide
テスト:
before destroying: True guil23
after destroying : True guil23
before return : False None
in the main : False None
問題はここにある:機能検証()True
にmdp_valideの値を変更し、その値を返した後、それが戻っFalse
同じになるようにパイソン2ではhttps://docs.python.org/3/reference/simple_stmts.html#the-nonlocal-statement
を、あなたは」
fenetre_connection
にグローバルとしてmdp_valide
を宣言することができます'fenetre_connection'関数で' global mdp_valide'を参照してください。それはあなたの問題かもしれません。 –私はそれを削除しました、申し訳ありません。しかし、それは元の投稿にあった。私はそれを戻した – Guil23
実際には、それはすでにそこにあったが、間違った押し込みによって誤解されるかもしれない。私はそれを修正しました – Guil23