使用 Python 和 tkinter 根据传感器输入输出一行文本

Using Python and tkinter to output a line of text based on sensor input

因为害怕问一个愚蠢的问题,而且我知道我已经不知所措,我希望有人能引导我朝着正确的方向前进。

我正在从事一个艺术项目,其中使用带有接近传感器的 PiTop,当人们进入传感器的一定距离内时,文本将使用 tkinters 消息系统改变(老实说,任何方式都是可行的,因为只要我可以设置一个带有白色文本的黑色 window,这是我发现它(几乎)起作用的唯一方法)。我已经意识到这比我预期的要复杂,所以我拥有(或显然没有)的基本 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()

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


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

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秒,然后重复该功能。

现在是这样,如果有人站在传感器前面,它会不断添加一个新词,打败 "purpose" 我正在尝试制作的 "Why machine"...

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

此外 - 将两个孩​​子从顶部向下移动会很棒,但我似乎无法使用 pady(x,x) 值仅将其从顶部向下移动,而不是同时填充底部和顶部.

抱歉,如果问的太多了,但感谢到目前为止的帮助。

您可以再次使用 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()