首页 > 解决方案 > 使用 Python 和 tkinter 根据传感器输入输出一行文本

问题描述

由于害怕问一个愚蠢的问题,并且知道我在我的头脑中,我希望有人能引导我走向正确的方向。

我正在从事一个艺术项目,在该项目中,使用带有接近传感器的 PiTop,当人们进入传感器的一定距离内时,文本将使用 tkinters 消息系统更改(老实说,只要我可以设置,任何方式都是可行的一个带有白色文本的黑色窗口,这是我发现它(几乎)工作的唯一方法)。我已经意识到这比我预期的要复杂,所以我拥有(或显然没有)的基本 Python 技能不足以让我完成这项工作。无论哪种方式,这是我制作的基本代码。我已经能够打印文本(并使用数组来获取单词以在挪威语中创建我想要的句子),但我不明白如何实际运行距离代码的测量,然后像某人一样触发新单词以特定距离接近传感器。

from ptpma.components import PMAUltrasonicSensor, PMALed
from time import sleep
from tkinter import *
import random

ultrasonic_sensor = PMAUltrasonicSensor("D4") #initialize the sensor

#print(ultrasonic_sensor.distance) shows the distance to the sensor
#sleep(0.1)

#random array for the various words
i = ['hensynsfull', 'nyttig','nådig','overbærende','sjenerøs','sympatisk','barmhjertig','altruistisk','anstendig','artig','behagelig','blid','dannet','dydig',
'edel','elskelig','elskverdig','ettergivende','fin','fredelig','fortrolig','fredsommelig','from','føyelig','galant','gemyttlig','god',
'godhjertet','godlynt','hengivende','hjelpsom','hjertelig','hyggelig','høflig','idealistisk','kjærlig','koselig','lun',
'lydig','lyttende','medgjørlig','mild','mottagelig','omsorgsfull','omtenksom','oppmerksom','rolig','skikkelig','spak','stillferdig',
'sømmelig','søt','tam','tillitsfull','varm','velmenende','veloppdragen','velvillig','vennlig','anstrengt','avvikende','flau','irritabel','nervøs',
'opprørt','rastløs','rådvill','selvbevisst','sårbar','urolig','usikker','uvel','angstfull','anspent','barsk','bedrøvet','bekymret',
'brå','engstelig','famlende','feig','forfjamset','forknytt','forlegen','forskrekket','forskremt','foruroliget','fryktsom','hissig','hvileløs',
'livlig','molefonken','motløs','nedstemt','oppjaget','oppspilt','pessimistisk','optimistisk','redd','sint','skremt','sjenert','skvetten',
'sky','spent','stressa','trist','ubesluttsom','usikker','utrygg','utålmodig']
tilfeldig = random.choice(i)
satt_sammen = "Hvorfor"'\n'"er du litt"'\n'+tilfeldig+"?"
#end random choice

#lage vindu i tkinter
master = Tk()

master.geometry("720x1440") #size of window
master.configure(background='black')
w = Message(master, text=satt_sammen)
w.config(anchor=CENTER, justify='center', pady=300, padx=200, bg='black', fg='white', font=('helvetica light', 60))

w.pack()
mainloop()

该程序目前唯一做的事情是每次我打开窗口时,它都会使用数组中的一个新单词来更新文本。我很感激任何意见。我一路搜索并找到了一些帮助,但我真的不明白如何检查输入(传感器)并因此根据该输入动态更改文本。


这就是我们目前所处的位置:

from ptpma.components import PMAUltrasonicSensor, PMALed
import tkinter as tk # PEP8: `import *` is not preferred
import random
ultrasonic_sensor = PMAUltrasonicSensor("D4") #initialize the sensor

# --- functions ---



def update_text():
    print(ultrasonic_sensor.distance) 
    if ultrasonic_sensor.distance < 40:
        w['text'] = random.choice(i)+"?"

    else:
        w['text'] = ""        

    master.after(5000, update_text) # run it again after 1000ms




def print_distance():
    print(ultrasonic_sensor.distance)
    master.after(40, print_distance)





# --- main ---



i = ['hensynsfull', 'nyttig','nådig','overbærende','sjenerøs','sympatisk','barmhjertig','altruistisk','anstendig','artig','behagelig','blid','dannet','dydig',
'edel','elskelig','elskverdig','ettergivende','fin','fredelig','fortrolig','fredsommelig','from','føyelig','galant','gemyttlig','god',
'godhjertet','godlynt','hengivende','hjelpsom','hjertelig','hyggelig','høflig','idealistisk','kjærlig','koselig','lun',
'lydig','lyttende','medgjørlig','mild','mottagelig','omsorgsfull','omtenksom','oppmerksom','rolig','skikkelig','spak','stillferdig',
'sømmelig','søt','tam','tillitsfull','varm','velmenende','veloppdragen','velvillig','vennlig','anstrengt','avvikende','flau','irritabel','nervøs',
'opprørt','rastløs','rådvill','selvbevisst','sårbar','urolig','usikker','uvel','angstfull','anspent','barsk','bedrøvet','bekymret',
'brå','engstelig','famlende','feig','forfjamset','forknytt','forlegen','forskrekket','forskremt','foruroliget','fryktsom','hissig','hvileløs',
'livlig','molefonken','motløs','nedstemt','oppjaget','oppspilt','pessimistisk','optimistisk','redd','sint','skremt','sjenert','skvetten',
'sky','spent','stressa','trist','ubesluttsom','usikker','utrygg','utålmodig']
tilfeldig = random.choice(i)
satt_sammen = "Hvorfor"'\n'"er du litt"'\n'+tilfeldig+"?"

master = tk.Tk()

master.geometry("720x1440") #size of window
master.configure(background='black')


w = tk.Message(master) # empty string,`update_text()` will set first text
x = tk.Message(master)

update_text() 
w.config(width=720, pady=50, padx=20, bg='black', fg='white', font=('helvetica light', 60))
x.config(width=720, anchor='center', justify='center', bg='black', fg='white', font=('helvetica light', 60), text="Hvorfor er du litt")

x.pack()


w.pack()

print_distance()
#create_sentence()

master.mainloop()

现在发生的情况是,每当有人在 40 距离处走到传感器前面时,变量就会变为特定的单词,并在屏幕上显示一定的时间。之后,如果前面没有人,它就会变成空白。我的问题是我想要以下内容,但无法让它工作:

在伪代码中:如果有人在传感器前面一定距离,立即从数组中设置单词。只要有人在前面,就把这个词留在那里,当传感器不再记录前面的人时(在这种情况下传感器值高于 40),让这个词一秒钟,然后留空。冷却 5 秒,然后重复该功能。

他们现在就是这样,如果有人只是站在传感器前面,它会不断添加一个新词,破坏我试图制造的“为什么机器”的“目的”......

如果有人对此有任何意见,那就太好了。

另外 - 将两个孩​​子从顶部向下移动会很棒,但我似乎不能使用 pady(x,x) 值仅将其从顶部向下移动,而不是将底部和顶部一起填充。

抱歉,如果有很多问题要问,但感谢迄今为止的帮助。

标签: pythontkintersensors

解决方案


您可以使用master.after(milliseconds, function_name)再次运行功能来检查传感器并更改文本。

我没有传感器,所以我每 1000 毫秒(1 秒)使用随机更改文本

#from ptpma.components import PMAUltrasonicSensor, PMALed
import tkinter as tk # PEP8: `import *` is not preferred
import random

# --- functions ---

def update_text():
    #print(ultrasonic_sensor.distance) shows the distance to the sensor
    w['text'] = random.choice(i)
    master.after(1000, update_text) # run it again after 1000ms

# --- main ---

#ultrasonic_sensor = PMAUltrasonicSensor("D4") #initialize the sensor

i = ['hensynsfull', 'nyttig','nådig','overbærende','sjenerøs','sympatisk','barmhjertig','altruistisk','anstendig','artig','behagelig','blid','dannet','dydig',
'edel','elskelig','elskverdig','ettergivende','fin','fredelig','fortrolig','fredsommelig','from','føyelig','galant','gemyttlig','god',
'godhjertet','godlynt','hengivende','hjelpsom','hjertelig','hyggelig','høflig','idealistisk','kjærlig','koselig','lun',
'lydig','lyttende','medgjørlig','mild','mottagelig','omsorgsfull','omtenksom','oppmerksom','rolig','skikkelig','spak','stillferdig',
'sømmelig','søt','tam','tillitsfull','varm','velmenende','veloppdragen','velvillig','vennlig','anstrengt','avvikende','flau','irritabel','nervøs',
'opprørt','rastløs','rådvill','selvbevisst','sårbar','urolig','usikker','uvel','angstfull','anspent','barsk','bedrøvet','bekymret',
'brå','engstelig','famlende','feig','forfjamset','forknytt','forlegen','forskrekket','forskremt','foruroliget','fryktsom','hissig','hvileløs',
'livlig','molefonken','motløs','nedstemt','oppjaget','oppspilt','pessimistisk','optimistisk','redd','sint','skremt','sjenert','skvetten',
'sky','spent','stressa','trist','ubesluttsom','usikker','utrygg','utålmodig']

master = tk.Tk()

master.geometry("720x1440") #size of window
master.configure(background='black')

w = tk.Message(master) # empty string,`update_text()` will set first text

w.config(anchor='center', justify='center', pady=300, padx=200, bg='black', fg='white', font=('helvetica light', 60))
w.pack()

update_text()  # run it first time

master.mainloop()

推荐阅读