Вы не привязаны ни к чему указанному c. Вы должны связать что-то. Таким образом, в этом случае вы хотите привязать к окну root, чтобы ключевое событие всегда обнаруживалось.
Вам также необходимо изменить способ вызова функций в привязке. back.func
не правильно. Вместо этого просто используйте back
.
Далее измените имя вашей функции next
, поскольку это уже имя сборки для Python, поэтому вы перезаписываете этот полезный метод.
Далее каждая из этих функций должна принимать хотя бы один аргумент для обработки события, которое отправляется функции из привязки. Если вам нужно также вызвать эту функцию из какого-то другого места без отправки аргумента, вы можете использовать event=None
для обработки всего, что вызывает функцию.
Затем поместите все ваши операции импорта сверху. Вы всегда должны держать импорт наверху.
Вот исправленная версия вашего кода:
import tkinter
import pyttsx3
# import sys # this import is not used.
vl = ["donuts", "cookies", "spicy chips", "mild chips", "cheesy chips",
"mini donuts", "Mrs. Freshlys Cupcakes", "rubbery cake thing"]
engine = pyttsx3.init()
cupo = vl[0] # cupo is current position, 0 is the first entry in the vl list
def current(event=None):
global cupo # cupo was defined outside of the function, therefore we call global
engine.say(cupo)
engine.runAndWait()
def back(event=None):
global cupo
pos = vl.index(cupo)
if pos == 0: # pos is position
engine.say(cupo)
engine.runAndWait()
else:
prepo = int(pos) - 1 # prepo is previous position
cupo = vl[prepo]
engine.say(cupo)
engine.runAndWait()
def next_func(event=None):
global cupo
pos = vl.index(cupo)
if pos == (len(vl) - 1):
engine.say(cupo)
engine.runAndWait()
else:
nexpo = int(pos) + 1 # nexpo is next position
cupo = vl[nexpo]
engine.say(cupo)
engine.runAndWait()
def vendy():
tkinter.Label(window, text="Vendy!").pack()
print('\n'.join(map(str, vl)))
window = tkinter.Tk()
window.title("GUI")
tkinter.Button(window, text="Back", command=back).pack()
tkinter.Button(window, text="Repeat", command=current).pack()
tkinter.Button(window, text="Next", command=next_func).pack()
window.bind('/', back)
window.bind('*', current)
window.bind('-', next_func)
window.mainloop()