【问题标题】:Pysimplegui and Pygame mergePysimplegui 和 Pygame 合并
【发布时间】:2021-12-02 00:18:37
【问题描述】:

您好,我正在尝试将 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) ...

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

任何帮助表示赞赏。

【问题讨论】:

  • 为什么要使用 pygame ?仅用于释放或按下事件键?
  • 我最初将它完全用于其他程序,布局、输入、图像和声音整个shebang。这次我只是在 pysimplegui 中使用了所有其他的混音器。但是,当我需要边缘检测程序的按键按下时,我只能在释放按键时获得按键输入。将查看您对直接读取​​密钥的任何建议,

标签: input keyboard pysimplegui


【解决方案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()

【讨论】:

  • 太棒了,见过绑定,但不知道如何有效地使用它们。谢谢 Jason 解决了这个问题。
  • Jason,我可以停止将绑定回调写入控制台吗?
  • 如上更新。
猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多