2017-12-12 39 views
-2

ボタンを何回押したかを表示するソフトウェアを少し作ろうとしています。私はGUIの作業を行った、ボタンの入力が動作しますが、私はボタンを押すたびにカウンタを更新する方法を把握することができません、root.update()は動作しませんでした。 コード:ボタンを押した回数を表示するTkinterを使用してカウンタを作成するには

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

By _button_ラズベリーの実際のメカニカルボタンを意味しますか? – Nae

+0

'time.sleep'はGUIもスリープ状態にすることに注意してください。 – Nae

答えて

1

あなたwhile Trueループは限りGUIが閉じていないとして活躍されることはありません。それを削除してみて、代わりに新しい関数を定義:

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() 
関連する問題