Использование Python и tkinter для вывода строки текста на основе сенсорного ввода - PullRequest
0 голосов
/ 24 февраля 2020

В страхе задать глупый вопрос и со знанием того, что я над головой, я надеюсь, что кто-то поведет меня в правильном направлении.

Я работаю над художественным проектом, где, используя PiTop с датчиком приближения, когда люди попадают на определенное расстояние от датчика, текст будет меняться с помощью системы сообщений tkinters (если честно, любой способ выполним, пока я могу установить черное окно с белым текстом, и это это единственный способ, которым я нашел это (почти) для работы. Я пришел к выводу, что это сложнее, чем я ожидал, поэтому базовых навыков, которые у меня есть (или, по-видимому, нет), недостаточно для того, чтобы это осуществить. В любом случае, вот основной код c, который я сделал. Я смог напечатать текст (и использовать массив, чтобы получить слово, чтобы создать предложение, которое я хочу на норвежском языке), но я не понимаю, как на самом деле запустить измерение кода расстояния, а затем вызвать новое слово, как кто-то приближается к датчику на определенном расстоянии c. Код в его нынешнем виде выглядит следующим образом:

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, переменная изменяется на заданное c слово и отображается на экране для установленное количество времени. После этого, если никого нет впереди, он гаснет. Моя проблема в том, что я хотел бы, чтобы следующее, и не мог заставить его работать:

В псевдокоде: если кто-то находится перед датчиком на определенном расстоянии, немедленно установите слово из массива. Оставьте слово там до тех пор, пока человек находится впереди, а когда датчик больше не регистрирует человека впереди (в этом случае значение датчика превышает 40), оставьте слово на одну секунду, затем go пусто. Перезарядка в течение 5 секунд, затем повторите функцию.

Они такие, какие есть сейчас, если кто-то просто стоит перед датчиком, он продолжает добавлять новое слово, игнорируя «цель» «Почему машина» Я пытаюсь сделать ...

Если у кого-то есть какие-либо комментарии по этому вопросу, было бы замечательно.

Кроме того, было бы здорово переместить двух детей сверху вниз, но я не могу похоже, что значение pady (x, x) используется только для того, чтобы сдвинуть его сверху вниз, а не дополнять нижнюю и верхнюю части вместе.

Извините, если об этом много просят, но пока благодарны за помощь.

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...