Pysimplegui 和 Pygame 合并

Pysimplegui and Pygame merge

您好,我正在尝试将 pygame 程序与 pysimplegui 合并。

我正在寻找一种抓住键盘按键下击键的方法。目前无论我在做什么,我都只能看到按键的上击。

我已经成功创建了 pysimplegui 程序,但这是我第一次尝试与 pygame 合并。

window 由

设置
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) ...

我无法让这两者协调工作,它们要么在内部永远循环,要么干脆停止程序。

感谢任何帮助。

如果您只需要检测何时按下和释放按键,请尝试绑定事件 '<KeyPress>''<KeyRelease>',而不是设置 sg.Window 的选项 return_keyboard_events=True

示例代码

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()