圆形键盘 python(tkinter?)

Circular keyboard python (tkinter?)

所以我正在尝试制作一些不同的虚拟键盘设计,目的是将它们与头部跟踪结合使用。我想探索与标准布局相比,圆形键盘是否更易于与头部跟踪一起使用。

键盘看起来像图片中的键盘,但我不确定如何使用 tkinter 进行这种布局(这是我用于其他键盘的布局,但我不限于此lib 以任何方式)。关于如何制作非 square/rectangular UI 的任何提示? 提前致谢。

您可以使用 Canvas 小部件将菜单绘制为弧形项目的集合。 canvas 的功能之一是您可以给 canvas 上的项目一个标签,然后您可以将该标签绑定到一个事件。

这不是一个完整的解决方案,但它说明了如何绘制响应点击以及进入和离开事件的圆形菜单。在下面的代码中,我们绘制了一个由八个圆弧组成的圆。每个弧都有一个通用标签“item”和一个特定标签“item-”。然后可以使用这些标签来绑定事件,并获取有关被单击项目的信息。

class PieMenu(tk.Canvas):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.tag_bind("item", "<ButtonRelease-1>", self._click)
        self.tag_bind("item", "<Enter>", self._enter)
        self.tag_bind("item", "<Leave>", self._leave)

        for index, start in enumerate(range(0, 360, 45)):
            self.create_arc(
                (2, 2, 200, 200),
                outline="black", fill="white",
                start=start, extent=45, tags=(f"item-{index}", "item")
            )

    def _click(self, event):
        item = event.widget.find_withtag("current")[0]
        tags = event.widget.itemcget("current", "tags")
        print(f"item: {item} tags: {tags}")

    def _enter(self,event):
        event.widget.itemconfigure("current", fill="lightgray")

    def _leave(self,event):
        event.widget.itemconfigure("current", fill="white")

您需要添加代码以包含每个项目的文本,并添加代码以了解在单击菜单的特定部分时调用什么函数。该示例的重点是展示绘制一个可以响应鼠标事件的简单菜单的技术。