Я сделал каталог говорящих торговых автоматов для слепых, он работает внутри малинового пи, вставленного в торговый автомат с динамиком.
Программа будет работать все время, без головы и csv где хранится информация о закусках торгового автомата и номера, он будет размещен в сети (хотя пока он временно находится в Pi). Его структура такова: 66, миссис фрешли кексы 14, Flamin Hot Cheetos и др c. Неважно, какие элементы заказа добавляются в CSV, поскольку я сортирую список в своем коде. Парень из компании Vending Machine сказал, что они с радостью обновят CSV новым содержимым, если они изменят вещи внутри торгового автомата; и поэтому, когда они сохраняют этот CSV, я хочу, чтобы моя программа, которая будет работать постоянно, извлекала эти данные fre sh и обновляла мою переменную VL (VendyList). Таким образом, если добавлен элемент «70, липкие медведи» или изменен номер 66, он автоматически обновит его. Есть ли способ обновить sh импорт CSV? Или обновлять sh всю программу всякий раз, когда кто-то нажимает «00» для функции «справки»?
Вот код
from gtts import gTTS
import pygame
from io import BytesIO
import os
import sys
import time
pygame.init()
if sys.version_info[0] == 3:
# for Python3
from tkinter import * ## notice lowercase 't' in tkinter here
else:
# for Python2
from Tkinter import *
def say(text):
tts = gTTS(text=text, slow=False, lang='en-us', lang_check=False)
fp = BytesIO()
tts.write_to_fp(fp)
fp.seek(0)
pygame.mixer.init()
pygame.mixer.music.load(fp)
pygame.mixer.music.play()
from csv import reader
infile = open(r'/home/pi/VendyLogProject/vendylist.csv',mode='r')
vl = sorted(list(reader(infile)))
vl2 = [item[0] for item in vl]
baseposition = vl[0] # 0 is the first entry index in the vl list
def current(event=None):
global baseposition # baseposition was defined outside of the function, therefore we call global
say(baseposition[1]+baseposition[0])
def back(event=None):
global baseposition
currentposition = vl.index(baseposition)
if currentposition == 0:
say(baseposition[1]+baseposition[0])
else:
previousposition = int(currentposition) - 1 # previousposition is previous position
baseposition = vl[previousposition]
say(baseposition[1]+baseposition[0])
def forward(event=None):
global baseposition
currentposition = vl.index(baseposition)
if currentposition == (len(vl) - 1):
say(baseposition[1]+baseposition[0])
else:
nextposition = int(currentposition) + 1 # nextposition is next position
baseposition = vl[nextposition]
say(baseposition[1]+baseposition[0])
def readnumber(int):
for item in vl:
global baseposition
currentposition = vl.index(baseposition)
if int == item[0]:
baseposition = vl[vl.index(item)]
say(baseposition[1]+baseposition[0])
def help():
say("Welcome to Vendy log! Use the plus and minus keys to go through the list of snacks or push a number to hear its contents!")
root = Tk()
prompt = ' VendyLog '
label1 = Label(root, text=prompt, width=len(prompt))
label1.pack()
#keys buffer
keybuf = []
def test_after():
if keybuf:
num = ''.join(keybuf)
keybuf.clear()
def get_key(event):
keybuf.append(event.char)
event.char = ''.join(keybuf)
root.after(500,test_after)
if event.char == '-':
back()
elif event.char == '+':
forward()
elif event.char == '.':
current()
elif event.char in vl2:
readnumber(event.char)
elif event.char == '00':
help()
root.bind_all('<Key>', get_key)
root.mainloop()