python - raspberry - Necesita un teclado Gui para una pantalla táctil que genera un pin cuando el código es correcto
instalar pantalla 3.5 raspberry pi 3 (1)
Tengo una pi raspberry con una pantalla táctil que ejecuta raspbian, espero tener una Gui en la pantalla táctil que tenga un teclado numérico que cuando se ingresa una entrada correcta, un pin saldrá a un pestillo de la puerta o algo así. He estado haciendo una Gui con un número en (por Python) pero no puedo conseguir varios números para sentar uno al lado del otro. cualquier información ayudará con esto :) Gracias. Este es el código que utilicé para probar y colocar los botones (se puede ver que acabo de utilizar un botón LED de encendido / apagado simple Gui y lo usé para ver la ubicación de los botones)
from Tkinter import *
import tkFont
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)
GPIO.output(40, GPIO.LOW)
win = Tk()
myFont = tkFont.Font(family = ''Helvetica'', size = 36, weight = ''bold'')
def ledON():
print("LED button pressed")
if GPIO.input(40) :
GPIO.output(40,GPIO.LOW)
ledButton["text"] = "LED OFF"
else:
GPIO.output(40,GPIO.HIGH)
ledButton["text"] = "LED ON"
def exitProgram():
print("Exit Button pressed")
GPIO.cleanup()
win.quit()
win.title("LED GUI")
exitButton = Button(win, text = "1", font = myFont, command = ledON, height =2 , width = 8)
exitButton.pack(side = LEFT, anchor=NW, expand=YES)
ledButton = Button(win, text = "2", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=CENTER, expand=YES)
ledButton = Button(win, text = "3", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = RIGHT, anchor=NE, expand=YES)
ledButton = Button(win, text = "4", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=W, expand=YES)
ledButton = Button(win, text = "5", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=W, expand=YES)
ledButton = Button(win, text = "6", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=W, expand=YES)
ledButton = Button(win, text = "7", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=W, expand=YES)
ledButton = Button(win, text = "8", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=W, expand=YES)
ledButton = Button(win, text = "9", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=N, expand=YES)
ledButton = Button(win, text = "0", font = myFont, command = ledON, height = 2, width =8 )
ledButton.pack(side = TOP, anchor=NW, expand=YES)
mainloop()
Ejemplo simple con teclado:
Utilizo un pin
global variable de cadena para mantener todos los números presionados.
(Puede usar list
lugar de string
)
La tecla *
elimina el último número, la tecla #
compara el pin
con el texto "3529"
import tkinter as tk
# --- functions ---
def code(value):
# inform function to use external/global variable
global pin
if value == ''*'':
# remove last number from `pin`
pin = pin[:-1]
# remove all from `entry` and put new `pin`
e.delete(''0'', ''end'')
e.insert(''end'', pin)
elif value == ''#'':
# check pin
if pin == "3529":
print("PIN OK")
else:
print("PIN ERROR!", pin)
# clear `pin`
pin = ''''
# clear `entry`
e.delete(''0'', ''end'')
else:
# add number to pin
pin += value
# add number to `entry`
e.insert(''end'', value)
print("Current:", pin)
# --- main ---
keys = [
[''1'', ''2'', ''3''],
[''4'', ''5'', ''6''],
[''7'', ''8'', ''9''],
[''*'', ''9'', ''#''],
]
# create global variable for pin
pin = '''' # empty string
root = tk.Tk()
# place to display pin
e = tk.Entry(root)
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` has 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=10, ipady=10)
root.mainloop()