PYSimpleGui 事件与 Keyboard.is_pressed('key') 结合使用,每次都有效,除了程序启动后的第一次。所以第一次点击永远不会起作用,但其他所有点击都会起作用。
硬编码我的按钮事件不是一个选项,我必须检查几个键,程序已经相当复杂了。文件管理器。 自己尝试一下...如果在程序启动时没有人工点击鼠标,则无法使其第一次工作。
import PySimpleGUI as sg
import keyboard
from time import sleep
layout = [
[
sg.Button('', enable_events=True, key=(1, 1))
]
]
window = sg.Window('Image Browser', layout,
return_keyboard_events=False, finalize=True, auto_size_buttons=False, use_default_focus=True,
resizable=True, size=(100, 100))
while True:
event, values = window.read(timeout=0)
if event == "Exit" or event == sg.WINDOW_CLOSED:
break
if type(event) is tuple and keyboard.is_pressed('shift'):
print("++++++++++++++++++++++++++++++++")
print("++++++++++++++++++++++++++++++++")
sleep(0.01)
你好。我尝试过不同的窗口参数,例如焦点、return_keyboard_events 等。 还尝试了不同的超时,并将 is_pressed 放在一行中,...就像
if type(event) is tuple:
if keyboard.is_pressed('shift'):
print("++++++++++++++++++++++++++++++++")
print("++++++++++++++++++++++++++++++++")
哪个按钮也并不重要。 有用的是在程序启动时向该按钮发送人工鼠标单击。 看起来有点老套..哈哈。 如果我在程序启动时劫持鼠标,然后将其放回原来的位置,那不会给人留下好印象......哈哈。 用户喜欢:“刚刚发生了什么?”...哈哈 我确信我错过了这里的一些东西。
好吧,我找到了解决方案! 我只需在程序启动后输入任意键盘即可。
可以是
keyboard.get_hotkey_name()
或 keyboard.is_pressed('shift')
或 keyboard.is_pressed('a')
完整解决方案:
import PySimpleGUI as sg
import keyboard
from time import sleep
keyboard.get_hotkey_name() # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
layout = [
[
sg.Button('', enable_events=True, key=(1, 1))
]
]
window = sg.Window('Image Browser', layout,
return_keyboard_events=False, finalize=True, auto_size_buttons=False, use_default_focus=True,
resizable=True, size=(100, 100))
while True:
event, values = window.read(timeout=0)
if event == "Exit" or event == sg.WINDOW_CLOSED:
break
if type(event) is tuple and keyboard.is_pressed('shift'):
print("++++++++++++++++++++++++++++++++")
print("++++++++++++++++++++++++++++++++")
sleep(0.01)
您可以将事件绑定到按键,例如:
# 'esc' event
window.bind("<Escape>", "-ESCAPE-")