改变D和E的颜色

时间:2017-04-09 20:34:40

标签: user-interface random tkinter colors shuffle

从我之前的帖子中偷来了,这就是这篇文章的目的。

具有用于引脚输入的触觉数字键盘的银行金库系统容易被小偷误用。窃贼可以使用相机,自己或其他人来查看输入时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 个答案:

答案 0 :(得分: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()