0

假设你有这个代码。

def test(widget):
    print(keyboard.is_pressed("shift"))

t=tkinter.Tk()
b=tkinter.scrolledtext.ScrolledText()
b.bind("<Return>", test)
b.pack()
t.mainloop()

就在第一次尝试按住 shift 并按 enter 时,它打印 False 但之后它工作正常(第一次触发此事件,如果按住 shift,则不会检测到它,但之后它会工作)。

4

1 回答 1

1

您可以使用@martineau 在评论中指出的内容检查是否在 tkinter 中按下了修饰键,如下所示:

import tkinter as tk
from tkinter.scrolledtext import ScrolledText

def test(event):
    # If you want to get the widget that fired the event, use this:
    widget = event.widget

    # Check if the shift key is pressed when the event is fired
    shift_pressed = bool(event.state & 0x0001)
    if shift_pressed:
        ...
    else:
        print("Shift isn't pressed.")

root = tk.Tk()
text_widget = ScrolledText(root)
text_widget.bind("<Return>", test)
text_widget.pack()
root.mainloop()

event.state是一个整数,用于保存触发事件时按下的不同键组合的标志。检查事件& 0x0001触发时是否按下了 shift 键。

于 2021-06-20T23:48:48.733 回答