#input #keyboard #pysimplegui
Вопрос:
привет, я пытаюсь объединить программу pygame с pysimplegui.
я ищу способ захватить удар вниз по клавише клавиатуры. в данный момент я вижу только движение ключа вверх, что бы я ни делал.
Я успешно создал программы pysimplegui, но это первый раз, когда я пытаюсь объединиться с pygame.
окно настраивается с помощью
window = sg.Window('UNICHALL V2.0',
Win_layout,
border_depth =20,
resizable = True,
keep_on_top = False,
finalize=True,
return_keyboard_events=True,
use_default_focus=False)
и в своей программе pygame я использую
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
stop = pygame.time.get_ticks()
delta = stop - start
key = event.key
if key == 27:
sys.exit(1) ...
я не могу заставить эти две работы работать в гармонии, они либо внутренне зацикливаются навсегда, либо просто останавливают программу.
Любая помощь будет признательна.
Комментарии:
1. Зачем использовать pygame ? только для ключа события, выпущенного или нажатого ?
2. Я полностью использовал его для другой программы изначально, макет, входы, изображения и звук во всем. на этот раз я просто использовал микшер для всего остального в pysimplegui. Тем не менее, я могу получить ввод ключа только при отпускании ключа, когда мне нужно нажать кнопку edge, чтобы определить нажатие клавиши вниз для моей программы. рассмотрит любые ваши предложения для непосредственного чтения ключей,
Ответ №1:
Если вам просто нужно определить, когда клавиша нажата и отпущена , попробуйте связать событие '<KeyPress>'
и '<KeyRelease>'
, не устанавливайте опцию return_keyboard_events=True
sg.Window
.
Пример Кода
import PySimpleGUI as sg
layout = [
[sg.InputText('', key='-INPUT-')],
[sg.Button('Add Binding'), sg.Button('Remove Binding')],
]
window = sg.Window('Test Program', layout, finalize=True)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
elif event in ('Press', 'Release'):
e = window.user_bind_event
action = 'pressed' if event == 'Press' else 'released'
print(f'char:{repr(e.char)} | keycode:{e.keycode} | keysym:{e.keysym} | keysym_num:{e.keysym_num} {action}')
elif event == 'Add Binding':
window.bind("<KeyPress>", "Press")
window.bind("<KeyRelease>", "Release")
elif event == 'Remove Binding':
window.TKroot.unbind("<KeyPress>")
window.user_bind_dict.pop("<KeyPress>", None)
window.TKroot.unbind("<KeyRelease>")
window.user_bind_dict.pop("<KeyRelease>", None)
window.close()
Комментарии:
1. Блестяще, видел переплеты, но понятия не имел, как их эффективно использовать. Спасибо, что Джейсон решил эту проблему.
2. Джейсон, могу ли я остановить запись обратного вызова привязки на консоль?
3. Обновите, как указано выше.