2017-12-12 12 views
-2

버튼을 몇 번 눌렀는지 표시하는 작은 소프트웨어를 만들려고합니다. 나는 GUI 작업을 만들었지 만 버튼 입력은 작동하지만 버튼을 누를 때마다 카운터를 업데이트하는 방법을 알지 못합니다. root.update()가 작동하지 않았습니다. 코드 :버튼을 몇 번 누르는 지 표시하는 Tkinter를 사용하여 카운터를 만드는 방법

귀하의 while True 루프가 한 GUI를 폐쇄하지 않는 한 작동하지 않을 것입니다
import RPi.GPIO as GPIO 
import time 
import os 
import Tkinter as tk 
from Tkinter import * 

root = tk.Tk() 

root.overrideredirect(True) 
root.overrideredirect(False) 
root.attributes('-fullscreen',True) 
root.configure(background='black') 
root.configure(cursor="none") 

buttonPin = 21 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
Counter = 69 

w = Label(root, text=Counter, fg="white", bg="black", font=("Helvetica",80)) 
w.pack() 
w.place(relx=0.5, rely=0.5, anchor=CENTER) 

last_state = True 
input_state = True 

root.mainloop() 

while True: 
    input_state = GPIO.input(buttonPin) 

    if (not input_state): 
     Counter += 1 
     print(Counter) 
     time.sleep(0.3) 
+0

는 또한 참조 [이] (https://stackoverflow.com/ q/459083/7032856) 및 [this] (https://stackoverflow.com/q/24849265/7032856). – Nae

+0

_button_은 라즈베리가 포함 된 실제 기계 버튼을 의미합니까? – Nae

+0

'time.sleep'은 GUI도 잠들게한다는 것에주의하십시오. – Nae

답변

1

. 를 제거하려고 한 다음 새 기능 정의 :

def ctr(): 
    global input_state, buttonPin, Counter 
    input_state = GPIO.input(buttonPin) 

    if (not input_state): 
     Counter += 1 
     print(Counter) 
     root.after(30, ctr) 

root.mainloop() 전에 스크립트의 본체에 한 번 전화 :

ctr()