2017-01-07 13 views
-2

У меня есть малиновый pi с сенсорным экраном, работающим на raspbian, я надеюсь, что на сенсорном экране появится Gui с цифровой клавиатурой, которая при правильном вводе введенный штырь будет выводиться на дверную защелку или что-то в этом роде. Я был готов сделать Gui с номером на (Python), но я не могу заставить несколько номеров сидеть рядом друг с другом. любая информация поможет в этом спасибо :) Это код, который я использовал, чтобы попробовать и поместить кнопки (вы можете видеть, что я просто использовал простую светодиодную кнопку включения/выключения Gui и использовал ее, чтобы увидеть размещение кнопок)Нужна клавиатура 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() 
+0

показать код - что вы использовали - Tkinter, PyQt, wxPython или что-то другое ее ? – furas

+0

Я думаю, что его Tkinter – RedstoneMaina

+0

вы можете назначить каждой функции кнопки с аргументом - то есть. 'command = lambda: ledON (" 1 ")' и использовать 'def ledON (arg):' чтобы получить этот аргумент и запомнить в списке. Таким образом вы можете получить свой ПИН-код. – furas

ответ

1

Простой пример с клавиатуры:

Я использую глобальную переменную строку pin, чтобы сохранить все нажимается номера.
(Вы можете использовать list вместо string)

Key * удаляет последний номер, ключ # сравнивает 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() 

enter image description here

GitHub: furas/python-examples/tkinter/button-keypad