【问题标题】:Circular keyboard python (tkinter?)圆形键盘 python (tkinter?)
【发布时间】:2022-01-19 20:00:51
【问题描述】:

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

键盘看起来像图片中的那个,但我不确定如何使用 tkinter 制作这种布局(这是我用于其他键盘的,但我不限于此库反正)。关于如何制作非方形/矩形 UI 的任何提示? 提前致谢。

【问题讨论】:

  • 您的问题不清楚。您需要什么帮助?你想要一个图片形状的窗口吗?
  • 窗口本身可以是方形的,我并不介意。但我想让按钮像图片中一样。例如,我希望 Q 按钮弯曲。而且我通常不确定如何在 tkinter 或 python 中做到这一点。所以简而言之,我想制作一个看起来像图片中的 GUI 键盘。
  • 有办法实现这一点。最简单的方法是将tk.Canvasdraw the shapescanvas.tag_bind 结合使用。
  • 感谢一定会关注 canvas 和 tag_bind。

标签: python user-interface tkinter keyboard


【解决方案1】:

您可以使用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")

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

【讨论】:

  • 圆弧似乎优于多边形。很好的例子
  • 谢谢,这确实是一个很好的例子。应该足够弄清楚了。
猜你喜欢
  • 2017-07-23
  • 2019-12-06
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多