圆形键盘 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")
您需要添加代码以包含每个项目的文本,并添加代码以了解在单击菜单的特定部分时调用什么函数。该示例的重点是展示绘制一个可以响应鼠标事件的简单菜单的技术。
所以我正在尝试制作一些不同的虚拟键盘设计,目的是将它们与头部跟踪结合使用。我想探索与标准布局相比,圆形键盘是否更易于与头部跟踪一起使用。
键盘看起来像图片中的键盘,但我不确定如何使用 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")
您需要添加代码以包含每个项目的文本,并添加代码以了解在单击菜单的特定部分时调用什么函数。该示例的重点是展示绘制一个可以响应鼠标事件的简单菜单的技术。