Skip to content

键盘快捷键 (Keyboard Shortcuts) ​


坚实的键盘支持是用户在使用 Web 应用,尤其是桌面应用时提高生产力的关键。毕竟,在鼠标和键盘之间频繁切换是非常令人烦恼的。

除了表单控件的 .autofocus 属性和 TextField.focus() 方法外,Flet 还允许你捕获和处理“全局”键盘事件。

要捕获所有的按键操作,只需实现 page.on_keyboard_event 事件处理函数。事件处理函数参数 e 是 KeyboardEvent 类的实例,它包含以下属性:

  • key — 按键的文本表示形式,例如 A、Enter 或 F5。
  • shift — 若按下了 “Shift” 键则为 True。
  • ctrl — 若按下了 “Control” 键则为 True。
  • alt — 若按下了 “Alt” (macOS 上为 “Option”) 键则为 True。
  • meta — 若按下了 “Command” (或 Windows 键) 键则为 True。

以下是一个简单的使用示例:

python
import flet as ft

def main(page: ft.Page):
    def on_keyboard(e: ft.KeyboardEvent):
        page.add(
            ft.Text(
                f"Key: {e.key}, Shift: {e.shift}, Control: {e.ctrl}, Alt: {e.alt}, Meta: {e.meta}"
            )
        )

    page.on_keyboard_event = on_keyboard
    page.add(
        ft.Text("请按下任意键并配合 CTRL、ALT、SHIFT 和 META 键进行组合...")
    )

ft.run(main)

键盘快捷键示例 ​

下面是一个更高级的示例:

提示

你可以在这里在线尝试。

python
import flet as ft


class ButtonControl(ft.Container):
    def __init__(self, text):
        super().__init__()
        self.content: ft.Text = ft.Text(text)
        self.border = ft.Border.all(1, ft.Colors.BLACK_54)
        self.border_radius = 3
        self.bgcolor = "0x09000000"
        self.padding = 10
        self.visible = False


def main(page: ft.Page):
    page.spacing = 50
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

    def on_keyboard(e: ft.KeyboardEvent):
        key.content.value = e.key
        key.visible = True
        shift.visible = e.shift
        ctrl.visible = e.ctrl
        alt.visible = e.alt
        meta.visible = e.meta
        page.update()

    page.on_keyboard_event = on_keyboard

    page.add(
        ft.SafeArea(
            content=ft.Column(
                controls=[
                    ft.Text(
                        "请按下任意键并配合 CTRL、ALT、SHIFT "
                        "和 META 键进行组合..."
                    ),
                    ft.Row(
                        controls=[
                            key := ButtonControl(""),
                            shift := ButtonControl("Shift"),
                            ctrl := ButtonControl("Control"),
                            alt := ButtonControl("Alt"),
                            meta := ButtonControl("Meta"),
                        ],
                        alignment=ft.MainAxisAlignment.CENTER,
                    ),
                ]
            )
        )
    )


if __name__ == "__main__":
    ft.run(main)

关注我,学习大模型、大数据、Python等热门技术。