Numpad в питоне с графическим интерфейсом

Я пытаюсь сделать простую цифровую клавиатуру с помощью guizero на python, где у каждого числа есть кнопка, и когда кнопки нажимаются, они возвращают свой номер в текстовое поле, где в текстовое поле введен PIN-код, введенный с помощью цифровой клавиатуры или с помощью клавиатуры и проверьте, совпадает ли значение текстового поля со значением, хранящимся в переменной с именем pin. Кнопка ввода на цифровой клавиатуре будет аналогична нажатию клавиши ввода на клавиатуре. Я много чего перепробовал, но при возврате из функции, которую вызывает кнопка, выдает ошибку, или функция установит значение текстового поля без нажатия кнопки. Если кто-то может прислать мне некоторые изменения, которые делают это для меня, я был бы очень благодарен. Макет Numpad: 1 2 3 4 5 6 7 8 9 0

Войти

Это код, который у меня есть (у меня есть только 3 кнопки для сохранения визуального пространства, и я знаю, что для всех 10 кнопок мне нужно просто дублировать их):

import guizero as gz

global pin
pin = ""

def pressed_1(number):
    text_pin.set(number)
def pressed_2(number):
    text_pin.set(number)
def pressed_3(number):
    text_pin.set(number)

def main():
    app = gz.App(title="pin",layout="grid")
    global text_pin
    text_pin = gz.TextBox(app,text=pin,grid=[0,0])
    button_1 = gz.PushButton(app,text="1",command=pressed_1("1"),grid=[1,1])
    button_2 = gz.PushButton(app,text="2",command=pressed_2("2"),grid=[2,1])
    button_3 = gz.PushButton(app,text="3",command=pressed_3("3"),grid=[3,1])
    app.display()
main()

Спасибо вам всем

1 ответ

Я тоже делаю цифровую клавиатуру для использования с Raspberry Pi. Вот мой код Вы можете адаптировать его, чтобы использовать любой метод, который вы хотите. Но в основном вы назначаете вход как вид массива, и когда кто-то нажимает на кнопку, он добавляет это число к "массиву", который является входом. Я уверен, что есть лучший и более быстрый способ сделать это, но я, честно говоря, не знаю Python, только C++, поэтому я бы не знал. Я еще не проверял это с моим пи, но думаю, что это сработает.

from guizero import App, Text, TextBox, PushButton
def fetch_response():
    user = submits.value
    if user == "1234":
        sleep(1)
        app.hide()

def Keypad__1():
   submits.append('1')
def Keypad__2():
   submits.append('2')
def Keypad__3():
   submits.append('3')
def Keypad__4():
   submits.append('4')
def Keypad__5():
   submits.append('5')
def Keypad__6():
   submits.append('6')
def Keypad__7():
   submits.append('7')
def Keypad__8():
   submits.append('8')
def Keypad__9():
   submits.append('9')
def Keypad__0():
   submits.append('0')
def Clearapp():
   submits.clear()
submit = PushButton(app, fetch_response, text="Submit", grid=[410, 300])
Clear_app = PushButton(app, Clearapp, text="Clear", grid=[410, 325])
app = App(title="KeyPad", width=800, height=480, layout="grid")
Keypad_1 = PushButton(app, Keypad__1, text="1", grid=[0, 400])
Keypad_1.width = 8
Keypad_1.height = 4
Keypad_2 = PushButton(app, Keypad__2, text="2", grid=[50, 400])
Keypad_2.width = 8
Keypad_2.height = 4
Keypad_3 = PushButton(app, Keypad__3, text="3", grid=[100, 400])
Keypad_3.width = 8
Keypad_3.height = 4
Keypad_4 = PushButton(app, Keypad__4, text="4", grid=[0, 450])
Keypad_4.width = 8
Keypad_4.height = 4
Keypad_5 = PushButton(app, Keypad__5, text="5", grid=[50, 450])
Keypad_5.width = 8
Keypad_5.height = 4
Keypad_6 = PushButton(app, Keypad__6, text="6", grid=[100, 450])
Keypad_6.width = 8
Keypad_6.height = 4
Keypad_7 = PushButton(app, Keypad__7, text="7", grid=[0, 500])
Keypad_7.width = 8
Keypad_7.height = 4
Keypad_8 = PushButton(app, Keypad__8, text="8", grid=[50, 500])
Keypad_8.width = 8
Keypad_8.height = 4
Keypad_9 = PushButton(app, Keypad__9, text="9", grid=[100, 500])
Keypad_9.width = 8
Keypad_9.height = 4
Keypad_0 = PushButton(app, Keypad__0, text="0", grid=[50, 550])
Keypad_0.width = 8
Keypad_0.height = 4
Другие вопросы по тегам