Проблема с использованием модуля клавиатуры и черепахи вместе - PullRequest
0 голосов
/ 30 мая 2019

Я пишу сценарий, чтобы читать нажатия клавиш и рисовать простые фигуры в черепахе. Для записи нажатий клавиш я использую модуль keyboard и для рисования turtle.

Я поражен из-за использования потоков в модуле keyboard.

То, что я сейчас делаю, это ...

  1. Я добавил горячие клавиши, используя метод keyboard.add_hotkey.
  2. Если я нажимаю определенную клавишу, эта буква добавляется в список (с именем data) для последующего использования.
  3. Когда я нажимаю комбинацию Ctrl + Shift + S, вызывается функция сохранения. В функции сохранения создается окно черепахи, и список data выводится по одной букве за раз. Форма нарисована в соответствии с буквой.
  4. Когда список становится пустым, я сохраняю чертеж и закрываю окно черепахи.

Проблема, с которой я сталкиваюсь, заключается в том, что после вызова функции сохранения программа перестает прослушивать другие вызовы. Возможно, это связано с использованием потоков в модуле 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 (), но не прослушивает нажатие других клавиш.

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете закончить ожидание, установив клавишу для нажатия как:

keyboard.wait('space')

но клавиатура. Wait () без каких-либо клавиш блокирует все нажатия клавиш навсегда

Я не уверен, почему ты даже положил его туда, я даже не уверен, почему он вообще что-то поднимает, но я думаю, что ты можешь сделать это:

if __name__=='__main__':
    '''your keystrokes'''
    while True: #or set a timer or something
        pass

ты не дал мне весь код, поэтому я не могу убедиться, что он работает

вам также необходимо глобализировать данные списка в функции push_fun

Надеюсь, это поможет:)

...