Pysimplegui 和 Pygame 合并

Posted

技术标签:

【中文标题】Pysimplegui 和 Pygame 合并【英文标题】:Pysimplegui and Pygame merge 【发布时间】: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 中使用了所有其他的混音器。但是,当我需要边缘检测程序的按键按下时,我只能在释放按键时获得按键输入。将查看您对直接读取​​密钥的任何建议, 【参考方案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,我可以停止将绑定回调写入控制台吗? 如上更新。

以上是关于Pysimplegui 和 Pygame 合并的主要内容,如果未能解决你的问题,请参考以下文章

pysimplegui-第四课:如何设定主题

Python 搜索引擎 GUI(PySimpleGui) - 带有 right_click_menu 的列表框

PySimpleGUI 中的交互式 matplotlib 绘图

pysimplegui-第五课:修改主题

在excel中怎么合并单元格?

如何通过Java 合并和取消合并 Excel 单元格