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 合并的主要内容,如果未能解决你的问题,请参考以下文章
Python 搜索引擎 GUI(PySimpleGui) - 带有 right_click_menu 的列表框