【发布时间】:2019-06-20 10:00:03
【问题描述】:
import PySimpleGUI as sg
layout = [[sg.Button("OK1", key='1', bind_return_key=True)],
[sg.Button("OK2", key='2', bind_return_key=True)],
[sg.Button("OK3", key='3', bind_return_key=True)]]
window = sg.Window("Keyboard Test", return_keyboard_events=True).Layout(layout)
while True:
event, values = window.Read()
print(event)
if event == None:
break
当我运行上面的代码并执行鼠标点击操作时,我得到如下输出,正如预期的那样,
点击OK1按钮在控制台打印为:1
点击OK2按钮在控制台打印为:2
点击OK3按钮在控制台打印为:3
但是,当我执行键盘事件时,我通过键盘的 tab 键访问按钮,并通过键盘按该按钮上的 Enter ,它在所有这三个按钮上返回相同的键,
通过 tab 键一一访问这些按钮,然后在每个我得到结果时按 Enter,
在 OK1 按钮上按 Enter 键 在控制台中打印为:1
在 OK2 按钮上按 Enter 在控制台中打印为:1
在 OK3 按钮上按 Enter 键 在控制台中打印为:1
这不是预期的输出。我想要的它也应该像鼠标点击事件一样打印自己的键。
我的意图是什么:
当用户在 OK1 上按下 Enter 按钮时,它应该打印('Hello, OK1 pressed.')
当用户在 OK2 上按下 Enter 按钮时,它应该打印('Hello, OK2 pressed.')
当用户在 OK3 上按下 Enter 按钮时,它应该打印('Hello, OK3 pressed.')
当用户点击 OK1 时,应该打印('Hello, OK1 press.')
当用户点击 OK2 时,它应该打印('Hello, OK2 press.')
当用户点击 OK3 时,应该打印('Hello, OK3 press.')
如何做到这一点?
【问题讨论】:
-
很高兴您提出这个问题。我仍在检查 Pyside2 (Qt) 是否在您按下 Enter 键时没有选择按钮。我看到了这种行为,但想验证它。无论作为答案提供的代码都适用于 Qt 和 tkinter。