【问题标题】:How do I make a counter using Tkinter displaying how many times a button is pressed如何使用 Tkinter 制作一个计数器,显示按钮被按下的次数
【发布时间】:2018-05-26 04:44:30
【问题描述】:

我正在尝试制作一个小软件来显示按下按钮的次数。我使 gui 工作,按钮输入工作,但我无法弄清楚每次按下按钮时如何更新计数器,root.update() 不起作用。 代码:

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)

【问题讨论】:

  • 另见thisthis
  • 您所说的按钮是指带有Raspberry的实际机械按钮吗?
  • 请注意,time.sleep 也会休眠 GUI。
  • 你的while循环在root.mainloop()之后,所以它只会在root关闭之后执行。所以你应该通过调用after来替换这个while循环,就像在Nae链接的问题中一样。
  • 如果您的问题是关于 Raspberry 的,可以编辑问题以包含其标签。因为它的追随者可能会提供更好或具体的解决方案。

标签: python tkinter raspberry-pi


【解决方案1】:

只要 GUI 未关闭,您的 while True 循环就不会工作。尝试删除它并改为定义一个新函数:

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()

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多