Volé de mon post précédent, c'est le but de ce post.Comment renommer les boutons lorsque 'E' est pressé
Les systèmes de chambre forte de banque qui ont un pavé numérique tactile pour l'entrée de la broche sont vulnérables à une mauvaise utilisation par un voleur. Les voleurs peuvent utiliser les caméras, eux-mêmes ou même d'autres personnes pour voir le motif que fait une broche à 4 chiffres lorsqu'elle est entrée; par conséquent, ils n'ont pas besoin de connaître la valeur réelle de votre broche, juste la séquence des pressions sur les boutons qui permettent l'entrée dans le système. Pour surmonter ce défaut fatal, un écran tactile doté d'une interface graphique peut être utilisé, les touches étant mélangées à chaque fois que la broche est entrée, qu'elle soit correcte ou non. En essayant de mélanger la matrice du clavier à chaque fois qu'un 'E' est reçu (ce qui fonctionne), l'interface graphique refuse de mettre à jour. Im essayant d'obtenir les nombres et les lettres à mélanger chaque fois qu'un utilisateur entre leur épingle. Toute aide est appréciée.
#!/usr/bin/env python3
import Tkinter as tk
import random
def code(value):
# inform function to use external/global variable
global pin
if value == 'D':
# remove last element from `pin`
pin = pin[:-1]
# remove all from `entry` and put new `pin`
e.delete('0', 'end')
e.insert('end', pin)
elif value == 'E':
# check pin
if pin == "3529":
print("PIN OK")
else:
print("PIN ERROR!")
# clear pin
pin = ''
e.delete('0', 'end')
else:
# add number to `pin`
pin += value
# add number to `entry`
e.insert('end', value)
print("Current:", pin)
# --- main ---
# keypad description
keys = [
['1', '2', '3'],
['4', '5', '6'],
['7', '8', '9'],
['D', '0', 'E'],
]
for key in keys:
random.shuffle(key)
random.shuffle(keys)
print(keys)
# create global variable
pin = '' # empty string
# init
root = tk.Tk()
# create `entry` to display `pin`
e = tk.Entry(root, justify='right')
e.grid(row=0, column=0, columnspan=3, ipady=5)
# create `buttons` using `keys
for y, row in enumerate(keys, 1):
for x, key in enumerate(row):
# `lambda` inside `for` have to use `val=key:code(val)`
# instead of direct `code(key)`
b = tk.Button(root, text=key, command=lambda val=key:code(val))
b.grid(row=y, column=x, ipadx=20, ipady=20)
# start program
root.mainloop()
Je mis en œuvre ce que vous avez dit, mais l'interface graphique ne marche pas mettre à jour le texte sur les boutons. Je pense que le 'pour la clé dans les touches: random.shuffle (clé) random.shuffle (keys) impression (keys)' partie doit être déplacée sous le 'valeur elif == 'E':' mais il ne sera toujours pas mélanger l'interface graphique pour moi quand j'appuie sur 'E'. – greatgamer34
Vous pourriez mieux expliquer ce que vous voulez faire – eyllanesc
Dois-je poster mon code mis à jour? – greatgamer34