2017-04-09 3 views
0

私の前の投稿から盗んだ、これはこの記事の目的です。DとEの色を変更

ピン入力のための触覚的な数字パッドを持つ銀行のボールトシステムは、泥棒による誤用の脆弱性があります。泥棒は、カメラ、それ自身、または他の人々を使って、4桁のピンが入力されたときのパターンを見ることができます。したがって、ピンの実際の価値を知る必要はなく、システムに入るための一連のボタン・プレスだけです。この致命的な欠陥を克服するために、数字パッドのGUIを備えたタッチスクリーンディスプレイを使用することができ、ピンが正しく入力されるかどうかにかかわらず、ピンが入力されるたびにシャッフルされる。

私は値DとEを赤色にして簡単に見つけることができますが、コードを修正しようとするとすべての値の色が変わります。誰もが回避策を知っていますか?すべての助けをいただければ幸いです。 次は私のコードです:

import tkinter as tk 
import random 

def code(position): 
    global pin 
    b = buttons[position] 
    value = b['text'] 

    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) 

    shuffle_buttons() 

def shuffle_buttons(): 
    for key in keys: 
     random.shuffle(key) 
    random.shuffle(keys) 
    for y, row in enumerate(keys): 
     for x, key in enumerate(row): 
      b = buttons[(x, y)] 
      b['text'] = key     

# --- main --- 

# keypad description 

keys = [ 
['1', '2', '3'], 
['4', '5', '6'], 
['7', '8', '9'], 
['D', '0', 'E'], 
] 

buttons = {} 

# 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): 
    for x, key in enumerate(row): 
     position = (x, y) 
     b = tk.Button(root, text= key, command= lambda val=position: code(val)) 
     b.grid(row=y+1, column=x, ipadx=20, ipady=20) 

     buttons[position] = b 

shuffle_buttons() 

root.mainloop() 
+1

あなたが赤に色を設定しているところ? – jdigital

+0

ボタンの残りの部分を乱していたので、それをしようとしていたコードの一部を削除しました。また、私は正しい角度から近づいていないと思います。 – greatgamer34

答えて

0

使用configいつでもshuffle_buttons()が呼び出されたボタンの値の色を変更するには:

import tkinter as tk 
import random 

def code(position): 
    global pin 
    b = buttons[position] 
    value = b['text'] 

    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) 

    shuffle_buttons() 

def shuffle_buttons(): 
    for key in keys: 
     random.shuffle(key) 
    random.shuffle(keys) 
    for y, row in enumerate(keys): 
     for x, key in enumerate(row): 
      b = buttons[(x, y)] 
      b['text'] = key 
      if key in ["D", "E"]: 
       b.config(fg="red") 
      else: 
       b.config(fg="black")    

# --- main --- 

# keypad description 

keys = [ 
['1', '2', '3'], 
['4', '5', '6'], 
['7', '8', '9'], 
['D', '0', 'E'], 
] 

buttons = {} 

# 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): 
    for x, key in enumerate(row): 
     position = (x, y) 
     b = tk.Button(root, text= key, command= lambda val=position: code(val)) 
     b.grid(row=y+1, column=x, ipadx=20, ipady=20) 

     buttons[position] = b 

shuffle_buttons() 

root.mainloop() 
+0

ありがとう、私はそれがそのようなシャッフル機能の中で検索することができたことを実現しませんでした!あなたの答えは正しいと思います。 – greatgamer34