首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用tkinter显示最新的输入信号

用tkinter显示最新的输入信号
EN

Stack Overflow用户
提问于 2012-12-13 18:13:52
回答 1查看 2.2K关注 0票数 4

python 2.7

我用树莓皮来监控一些数字输入信号,作为一个业余项目。我希望有一个大的显示,显示累积的值,并更新他们的全局变量,将跟踪输入信号。现在,我将在面包板上使用按钮,所以我尝试使用一个保持变量来防止计数器在每一个周期中递增。我对Python非常陌生,因为我确信这是显而易见的,所以如果可能的话,请保持简单。我调用一个输入PE_MATTRESSES、另一个PE_COMBINED和另一个RESET,希望显示从PE_COMBINED中减去PE_MATTRESSES的第三个值。当然,RESET会把所有的东西都归零。

不过,我的伪代码是:

  • 建立I/O和全局变量
  • 创建GUI
  • 而1 -看看I/O -更新全球变量 -更新标签以显示标签 --循环

我的代码如下:

代码语言:javascript
复制
import Tkinter as tk
import tkFont
import time
import RPi.GPIO as GPIO


GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)


PE_MATTRESS = GPIO.input(17)
PE_MATTRESS_LATCH = 0
PE_MATTRESS_ACCUMULATOR = 0
PE_COMBINED = GPIO.input(21)
PE_COMBINED_LATCH = 0
PE_COMBINED_ACCUMULATOR = 0
BOXSPRING_ACCUMULATOR = 0
BOXSPRING_ACCUMULATOR = PE_COMBINED_ACCUMULATOR - PE_MATTRESS_ACCUMULATOR 
RESET = GPIO.input(22)



class App:
    def __init__(self):
        root=tk.Tk()
        # create a custom font
        self.customFont = tkFont.Font(family="Helvetica", size=117)


        # create widgets 

        label1 = tk.Label(root, text="MATTRESSES: %s" % PE_MATTRESS_ACCUMULATOR , font=self.customFont)
        label1.pack()

        spacer1 = tk.Label(root, text="", font=self.customFont)
        spacer1.pack()

        Quit = tk.Button(root, text="QUIT", command=quit)
        Increment = tk.Button(root, text="Test", command=Inc)
        Quit.pack()
        Increment.pack()


        label2 = tk.Label(root, text="BOXSPRINGS: %s" % BOXSPRING_ACCUMULATOR, font=self.customFont)
        label2.pack()

        spacer2 = tk.Label(root, text="", font=self.customFont)
        spacer2.pack()


        label3 = tk.Label(root, text="      COMBINED: %s" % PE_COMBINED_ACCUMULATOR, font=self.customFont)
        label3.pack()



        root.geometry('1800x1000+0+0')
        root.after(10,Inputs)

        root.mainloop()

    def Inc():

        PE_MATTRESS_ACCUMULATOR = PE_MATTRESS_ACCUMULATOR + 1
    label1.setText("MATTRESSES: %s" % PE_MATTRESS_ACCUMULATOR)
    label2.setText("BOXSPRINGS: %s" % BOXSPRING_ACCUMULATOR)
    label3.setText("      COMBINED: %s" % PE_COMBINED_ACCUMULATOR)

        root.update_idletasks()


    def Inputs():

        if PE_MATTRESS == True and PE_MATTRESS_LATCH == False:
            PE_MATTRESS_ACCUMULATOR = PE_MATTRESS_ACCUMULATOR + 1
            PE_MATTRESS_LATCH = True


        elif PE_MATTRESS == False and PE_MATTRESS_LATCH == True:
            PE_MATTRESS_LATCH = False

        elif PE_COMBINED == True and PE_COMBINED_LATCH == False:
            PE_COMBINED_ACCUMULATOR = PE_COMBINED_ACCUMULATOR + 1
            PE_COMBINED_LATCH = True

        elif PE_COMBINED == False and PE_COMBINED_LATCH == True:
            PE_COMBINED_LATCH = False

        elif RESET == True:
            PE_COMBINED_ACCUMULATOR = 0
            PE_MATTRESS_ACCUMULATOR = 0

app=App()
EN

回答 1

Stack Overflow用户

发布于 2013-02-26 13:32:01

伪代码包括一个while 1循环,但实际代码没有。而且,从来没有调用过Inc()。我建议您在Inputs()末尾添加以下行

代码语言:javascript
复制
self.Inc()
self.root.after(10, self.Inputs)

您还必须使root成为一个实例变量,即在__init__()中包含self.root = root才能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13865907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档