PYSimpleGui 事件与 Keyboard.is_pressed('key') 结合使用,每次都有效,程序启动后第一次除外

问题描述 投票:0回答:2

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("++++++++++++++++++++++++++++++++")

哪个按钮也并不重要。 有用的是在程序启动时向该按钮发送人工鼠标单击。 看起来有点老套..哈哈。 如果我在程序启动时劫持鼠标,然后将其放回原来的位置,那不会给人留下好印象......哈哈。 用户喜欢:“刚刚发生了什么?”...哈哈 我确信我错过了这里的一些东西。

python keyboard-events pysimplegui
2个回答
0
投票

好吧,我找到了解决方案! 我只需在程序启动后输入任意键盘即可。

可以是

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)

0
投票

您可以将事件绑定到按键,例如:

# 'esc' event
window.bind("<Escape>", "-ESCAPE-")
© www.soinside.com 2019 - 2024. All rights reserved.