Я пишу сценарий, чтобы читать нажатия клавиш и рисовать простые фигуры в черепахе.
Для записи нажатий клавиш я использую модуль keyboard
и для рисования turtle
.
Я поражен из-за использования потоков в модуле keyboard
.
То, что я сейчас делаю, это ...
- Я добавил горячие клавиши, используя метод
keyboard.add_hotkey
.
- Если я нажимаю определенную клавишу, эта буква добавляется в список (с именем
data
) для последующего использования.
- Когда я нажимаю комбинацию Ctrl + Shift + S, вызывается функция сохранения. В функции сохранения создается окно черепахи, и список
data
выводится по одной букве за раз. Форма нарисована в соответствии с буквой.
- Когда список становится пустым, я сохраняю чертеж и закрываю окно черепахи.
Проблема, с которой я сталкиваюсь, заключается в том, что после вызова функции сохранения программа перестает прослушивать другие вызовы. Возможно, это связано с использованием потоков в модуле keyboard
.
Код прилагается здесь-
def start():
#turtle.mainloop()
s=turtle.Screen().setup( width = WIDTH, height = HEIGHT, startx = 0, starty = 0)
global t
t=turtle.Turtle()
turtle.ht()
t.ht()
def save():
start()
global t
global data
t.speed(0)
while data:
fun = data.pop()
if fun=='c':
draw_circle()
elif fun=='r':
draw_rectangle()
elif fun=='p':
draw_polygon()
elif fun=='h':
draw_hexagon()
elif fun=='t':
draw_triangle()
elif fun=='m':
draw_pentagon()
ts = turtle.getscreen()
ts.getcanvas().postscript(file="drawing.eps")
img = Image.open('drawing.eps')
img.save('drawing.png')
turtle.bye()
def push_fun(fun):
data.append(fun)
if __name__=='__main__':
keyboard.add_hotkey('ctrl+shift+s', save)
keyboard.add_hotkey('ctrl+shift+e', exit)
keyboard.add_hotkey('ctrl+shift+p', send_to_server)
# keyboard.add_hotkey('ctrl+shift+s', save, args=(data))
keyboard.add_hotkey('c', push_fun, args=('c',))
keyboard.add_hotkey('s', push_fun, args=('t',))
keyboard.add_hotkey('h', push_fun, args=('h',))
keyboard.add_hotkey('p', push_fun, args=('p',))
keyboard.add_hotkey('r', push_fun, args=('r',))
keyboard.wait()
После вызова функции сохранения программа остается в части keyboard.wait (), но не прослушивает нажатие других клавиш.