Kivy (Python) - 椭圆点击事件

2023-12-30

我正在尝试翻译的开头一个简单的画布应用程序 https://bloom510.github.io/pitch-canvas/我用 JavaScript 编写了 Kivy 框架。我已经能够沿着圆的周长分布顶点,但是无论是用 Python 还是 Kv 语言尝试,我都未能成功在每个顶点上注册单击事件。一个好的开始可能是更改单击的任何顶点的大小。欢迎任何提示、反馈、解决方案。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.properties import NumericProperty
from random import randint
import math

class Vertex(Widget):
    def __init__(self, position=(50,50), **kwargs):
        super(Vertex, self).__init__(**kwargs)
        self.position = position
        self.size = (10,10)


    def draw(self):
     with self.canvas:
        Color(1., 0, 0)
        Ellipse(pos=self.position, size=self.size)


class ChromaticCircle(Widget):
    vertices = []

    def __init__(self, radius=100, **kwargs):
        super(ChromaticCircle, self).__init__(**kwargs)
        self.radius = radius
        self.draw()

    def draw(self):
        interval = (math.pi * 2) / 12

        with self.canvas:
            Color(1., 0, 0)

            for i in range(1, 13):
                angle = (math.radians(360) / 12) * (i + 9)
                position = ((self.center_x + 200) + (self.radius*math.cos(angle)), (self.center_y + 200)+(self.radius)*math.sin(angle))
                self.vertices.append(Vertex(position))

            for j in range(len(self.vertices)):
                self.vertices[j].draw()


class MyApp(App):
    def build(self):
        return ChromaticCircle()

if __name__ == '__main__':
    MyApp().run()

您可以捕获您的点击Vertex小部件通过使用collide_point方法中的on_touch_down方法来检查是否Touch事件发生在Vertex:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.properties import NumericProperty
from random import randint
import math

class Vertex(Widget):
    def __init__(self, position=(50,50), **kwargs):
        super(Vertex, self).__init__(**kwargs)
        self.position = position
        self.size = (10,10)
        self.pos = position    # need to set the `pos` as `collide_point` uses it

    def draw(self):
     with self.canvas:
        Color(1., 0, 0)
        Ellipse(pos=self.position, size=self.size)


class ChromaticCircle(Widget):
    vertices = []

    def __init__(self, radius=100, **kwargs):
        super(ChromaticCircle, self).__init__(**kwargs)
        self.radius = radius
        self.draw()

    def on_touch_down(self, touch):
        # check if the touch is on a Vertex
        for vert in self.vertices:
            if vert.collide_point(touch.x, touch.y):
                print('click on vertex: ' + str(vert.pos))
                return True
        return super(ChromaticCircle, self).on_touch_down(touch)

    def draw(self):
        interval = (math.pi * 2) / 12

        with self.canvas:
            Color(1., 0, 0)

            for i in range(1, 13):
                angle = (math.radians(360) / 12) * (i + 9)
                position = ((self.center_x + 200) + (self.radius*math.cos(angle)), (self.center_y + 200)+(self.radius)*math.sin(angle))
                print('adding vertex at ' + str(position))
                self.vertices.append(Vertex(position))

            for j in range(len(self.vertices)):
                self.vertices[j].draw()


class MyApp(App):
    def build(self):
        return ChromaticCircle()

if __name__ == '__main__':
    MyApp().run()

您可能需要考虑一些其他细节。这pos of the Ellipse是左下角,所以你的顶点位置不在绘制的中心Ellipse.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kivy (Python) - 椭圆点击事件 的相关文章

  • 在 pandas 中单独打印一列的原始值?

    我有一个数据框 df pd DataFrame name george age 23 name anna age 26 现在我想检索乔治的年龄 df df name george age 但这会输出一些额外的信息以及原始值 0 23 Nam
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 使用 pandas 将字符串对象转换为 int/float

    import pandas as pd path1 home supertramp Desktop 100 life 180 data csv mydf pd read csv path1 numcigar Never 0 1 5 Ciga
  • 将一维数组转换为下三角矩阵

    我想将一维数组转换为较低的零对角矩阵 同时保留所有数字 我知道numpy tril函数 但它用零替换了一些元素 我需要扩展矩阵以包含所有原始数字 例如 10 20 40 46 33 14 12 46 52 30 59 18 11 22 30
  • Django 不会以奇怪的错误“AttributeError: 'module' object has no attribute 'getargspec'”启动

    我对 Django 的内部结构有点缺乏经验 所以我现在完全陷入困境 它昨天起作用了 但我不记得我改变过任何重要的东西 当我转身时DEBUG True任何恰好位于列表中第一个的模块上都有堆栈跟踪 Traceback most recent c
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • Tensorflow 不分配完整的 GPU 内存

    Tensorflow 默认分配所有 GPU 内存 但我的新设置实际上只有 9588 MiB 11264 MiB 我预计大约 11 000MiB 就像我的旧设置一样 张量流信息在这里 from tensorflow python client
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何将类添加到 LinkML 中的 SchemaDefinition?

    中的图表https linkml io linkml model docs SchemaDefinition https linkml io linkml model docs SchemaDefinition and https link
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • 在seaborn中对箱线图x轴进行排序

    我的数据框round data看起来像这样 error username task path 0 0 02 n49vq14uhvy93i5uw33tf7s1ei07vngozrzlsr6q6cnh8w 39 png 1 0 10 n49vq
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 线性同余生成器 - 如何选择种子和统计检验

    我需要做一个线性同余生成器 它将成功通过所选的统计测试 我的问题是 如何正确选择发电机的数字以及 我应该选择哪些统计检验 我想 均匀性的卡方频率测试 每代收集10 000个号码的方法 将 0 1 细分为10个相等的细分 柯尔莫哥洛夫 斯米尔
  • 计算 pyspark df 列中子字符串列表的出现次数

    我想计算子字符串列表的出现次数 并根据 pyspark df 中包含长字符串的列创建一个列 Input ID History 1 USA UK IND DEN MAL SWE AUS 2 USA UK PAK NOR 3 NOR NZE 4
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • 更换壳牌管道[重复]

    这个问题在这里已经有答案了 在 subprocess 模块的 Python 2 7 文档中 我找到了以下片段 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdo
  • python dicttoxml 多次使用相同的键

    我正在尝试做如下所示的 xml
  • 在 scipy 中创建新的发行版

    我试图根据我拥有的一些数据创建一个分布 然后从该分布中随机抽取 这是我所拥有的 from scipy import stats import numpy def getDistribution data kernel stats gauss
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code

随机推荐

  • 当匹配查询的所有文档的字段总和超过某个值时,如何触发 elastalert

    当匹配查询的所有文档的字段总和超过某个值时 是否可以触发elastalert 假设每个文档都有一个 价格 值 例如 当最后一天的 价格 值总和超过 200 时 是否可以触发 elastalert 示例文档 type transaction
  • 转换数据以适应正态分布

    我有一个比较容易理解的问题 我有一组数据 我想估计这些数据适合的程度标准正态分布 为此 我从我的代码开始 f p m p hist data 128 f p f p trapz m p f p x th min data 001 max d
  • 在 UIView 外部绘制阴影

    背景 我有一个UIView具有以下属性 阿尔法 1 背景颜色 白色 不透明度 0 35 圆角 阴影 Code 这就是我创建阴影的方法 UIView扩大 self layer masksToBounds false self layer sh
  • 对于iOS healthkit如何保存收缩压和舒张压值?

    这是在健康套件中保存血压数据的代码 HKUnit BPunit HKUnit millimeterOfMercuryUnit HKQuantity BPSysQuantity HKQuantity quantityWithUnit BPun
  • 在 PHP 中向日期添加三个月

    我有一个变量叫做 effectiveDate包含日期2012 03 26 我试图在此日期基础上增加三个月 但没有成功 这是我尝试过的 effectiveDate strtotime 3 months strtotime effectiveD
  • 按上下文获取所有标签以实现 acts-as-taggable-on

    We use https github com mbleigh acts as taggable on https github com mbleigh acts as taggable on对于我们的 Rails 应用程序 我们遇到了问题
  • 如何与 React Test Renderer / Jest 渲染的组件交互

    我正在使用 Jest 和快照测试 我想做的是渲染一个组件ReactTestRenderer 然后模拟单击其中的按钮 然后验证快照 ReactTestRenderer 返回的对象create呼叫有一个getInstance函数允许我直接调用它
  • 不兼容的片段类型

    你好 我在 android 中有一个小应用程序 我在其中使用带导航抽屉的片段作为菜单 但现在我想在用户单击某些内容时在片段对话框弹出窗口中显示 并且出现以下错误 主要活动 private void displayView int posit
  • shell 脚本参数非位置

    有没有办法将非位置参数提供给 shell 脚本 意思是明确指定某种标志 myscript sh value1 value2 myscript sh val1 value1 val2 value2 您可以使用getopts 但我不喜欢它 因为
  • MySQL 错误 1241:操作数应包含 1 列

    我正在尝试将表1中的数据插入表2中 insert into table2 Name Subject student id result select Name Subject student id result from table1 表2
  • 在.Net Framework中使用最新版本的System.Net.Http

    最新版本System Net Http https www nuget org packages System Net Http nuget 上的版本是 4 3 4 但即使是最新的 Net Framework 4 8 也附带了该库的 4 2
  • 拼写检查等统计句子建议模型

    已经有可用的拼写检查模型 可以帮助我们根据经过训练的正确拼写语料库找到建议的正确拼写 是否可以将粒度从字母表增加到 单词 以便我们可以有均匀的短语建议 这样如果输入了错误的短语 那么它应该从正确短语的语料库中建议最接近的正确短语 当然它是从
  • Google 地图信息窗口中的 YouTube 视频

    我正在尝试将 YouTube 视频放入 Google 地图 v3 信息窗口中 它在 Firefox 和 Internet Explorer 中运行良好 It does not在 Safari 和 Chrome 中工作 在这些浏览器中 定位已
  • 在 Activity.onCreate(..) 中显示警报

    我是 Android 新手 这是我的第一个问题 所以请放轻松 是否可以检查 Activity 的 onCreate 内的某些条件并显示 AlertDialog 我在 Oncreate 中匿名创建一个 AlertDialog 并在该实例上调用
  • 使用 R Markdown 的 Beamer 演示

    我正在使用 R Markdown 来制作投影仪演示我对幻灯片水平有疑问 我选择法兰克福主题 该主题允许制定演示计划 标题中的项目符号 我的问题 当我输入 slide level 2 时 我有内容 但没有演示文稿的计划 当我输入 slide
  • 如何从命令行将错误列表(或任何自定义查询)从 TFS 导出到 Excel?

    我需要将错误列表从 Team Foundation Server 导出到 Excel 手动执行此操作很简单 但我需要命令行版本 因为该任务需要自动化 有人知道该怎么做吗 回答你原来的问题 在 TFS 中添加新查询 创建查询并单击 保存 这应
  • 使用 Visual Studio 创建 MSI 并强制所有用户

    我使用 Visual Studio 2015 带有 Visual Studio 安装程序插件 创建了一个安装程序 目标是始终使用相同的本地资源运行应用程序 无论谁登录 因此我们的目标是 CommonAppDataFolder Win10 上
  • 淡出旧元素,淡入新元素

    我是新来反应并尝试过反应动画 http facebook github io react docs animation html 当在 TransitionGroup 中添加或删除元素时 它们非常有用 但是 如果我用类似的元素替换单个元素
  • 非活动类中的警报对话框

    我有一个代码可以检查一些数据并在非活动类中显示警报 但是在运行应用程序时崩溃并且不显示警报对话框 我使用下面的代码 if str isEmpty strPort isEmpty new AlertDialog Builder Mtx get
  • Kivy (Python) - 椭圆点击事件

    我正在尝试翻译的开头一个简单的画布应用程序 https bloom510 github io pitch canvas 我用 JavaScript 编写了 Kivy 框架 我已经能够沿着圆的周长分布顶点 但是无论是用 Python 还是 K