触摸屏需要一个 Gui 键盘,当代码正确时输出一个 pin
Need a Gui Keypad for a touchscreen that outputs a pin when code is correct
我有一个带触摸屏的 raspberry pi 运行 raspbian,我希望在触摸屏上有一个带有数字键盘的 Gui,当输入正确的输入时一个引脚将输出到门闩或其他东西。我一直在制作一个带有数字的 Gui(Python),但我无法让几个数字并排坐在一起。任何信息都会对此有所帮助谢谢:)
这是我用来尝试放置按钮的代码(你可以看到我只是使用了一个简单的 LED on/off 按钮 Gui 并用它来查看按钮的位置)
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()
带键盘的简单示例:
我使用全局字符串变量 pin
来保存所有按下的数字。
(您可以使用 list
而不是 string
)
键 *
删除最后一个数字,键 #
将 pin
与文本 "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()
GitHub: furas/python-examples/tkinter/__button__/button-keypad
(编辑: 我将 link 更改为 GitHub 因为我将代码移到了子文件夹)
我有一个带触摸屏的 raspberry pi 运行 raspbian,我希望在触摸屏上有一个带有数字键盘的 Gui,当输入正确的输入时一个引脚将输出到门闩或其他东西。我一直在制作一个带有数字的 Gui(Python),但我无法让几个数字并排坐在一起。任何信息都会对此有所帮助谢谢:) 这是我用来尝试放置按钮的代码(你可以看到我只是使用了一个简单的 LED on/off 按钮 Gui 并用它来查看按钮的位置)
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()
带键盘的简单示例:
我使用全局字符串变量 pin
来保存所有按下的数字。
(您可以使用 list
而不是 string
)
键 *
删除最后一个数字,键 #
将 pin
与文本 "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()
GitHub: furas/python-examples/tkinter/__button__/button-keypad
(编辑: 我将 link 更改为 GitHub 因为我将代码移到了子文件夹)