首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter PIR传感器

Tkinter PIR传感器
EN

Stack Overflow用户
提问于 2017-05-02 12:32:06
回答 1查看 284关注 0票数 0

我正在尝试创建一个智能镜子,可以显示不同的信息,如天气,3天预报,新闻馈送和推文。我已经将所有这些信息打印在一个窗口中,按照我想要的方式排列,但程序的最后一部分需要与程序的其余部分一起工作,这是一个PIR传感器。

我已经测试了传感器,它可以自己工作,但我想不出一种方法来创建窗口,然后让传感器开始扫描数据,基本上是根据范围内是否有人打开或关闭监视器。

正如我所说的,除了我似乎找不到一种方法来显示tkinter窗口,然后让程序开始扫描动作来打开和关闭监视器之外,我已经完成了所有的代码工作。在这一点上,我不需要更新信息(天气,twitter等),我只担心让监视器打开和关闭,或者只是熄灭和重新显示之前拉出的信息,当一个人在范围内。

我有一个在开始时用来更改监视器状态的示例,因为在我决定寻求帮助之前,这是我尝试放置它的最后一个位置。

从我使用它所获得的经验来看,当程序的主循环部分被调用时,它似乎不能调用其他函数。我可能错了,但事情看起来就是这样。

我已经将程序精简为我想要的窗口功能。因此,使用下面提供的代码,在创建显示器之后,我需要实现PIR传感器来打开和关闭显示器。

代码语言:javascript
复制
from tkinter import *
import os, subprocess
from gpiozero import *

pir = MotionSensor (4) 

while True:
if pir.motion_detected:
    subprocess.call('xset dpms force on', shell=True)
    print("yes")
else:
     subprocess.call('xset dpms force off', shell=True)
     print("no")






    #creates a fullscreen window and makes it black. 

       tk = Tk()
       tk.configure(bg='black')
       tk.attributes('-fullscreen', True)


       tk.mainloop()
EN

回答 1

Stack Overflow用户

发布于 2017-05-03 00:23:56

你不能让一个带有infinate while循环的tkinter程序同时期望tkinter主循环运行。

建议您使用gpiozero中的回调来调用一个函数,以便在检测到运动时启用屏幕,或者调用一个tkinter.after方法,以便在指定的时间段后关闭屏幕。

代码语言:javascript
复制
def myScreenOnFunction():
    subprocess.call('xset dpms force on', shell=True)
    print("Screen On")

....

pir = MotionSensor (4)
pir.when_motion = myScreenOnFunction

tk = Tk()
tk.configure(bg='black')
tk.attributes('-fullscreen', True)


tk.mainloop()

像这样的东西应该可以很好地与Tkinter配合使用,并允许主循环运行。

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

https://stackoverflow.com/questions/43730137

复制
相关文章

相似问题

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