kivy学习之路--坐标系和坐标转换函数

参考kivy文档796页,kivy大多数控件默认使用绝对坐标系,即window坐标系,原点位于屏幕window左下角,所有控件的坐标都是相对屏幕左下角的绝对坐标。

RelativeLayout使用的是相对坐标系,即relative 坐标系,如果控件树中存在RelativeLayout,那么隶属于该布局的控件的坐标原点是该布局的左下角,而不是屏幕左下角。如果存在多个RelativeLayout,那么控件以最靠近它的RelativeLayout类型的父控件的左下角为坐标原点。如果控件自身也是RelativeLayout类型,但仍然以最靠近它的RelativeLayout类型的父控件的坐标作为坐标系,这种相对坐标系称为parent 坐标系。反之,如果以自身作为坐标系,则是local坐标系。

其他使用相对坐标系的控件有Scatter、ScatterLayout、ScrollView。

     坐标转换函数

这类函数用于转换window、parent、local这三类坐标系的坐标,都接收三个参数,x,y,relative=False(relative参数功能不详,我测试不出True和False情况的区别,求大神告知)

to_widget    window坐标转local坐标,

to_local      parent坐标转local坐标

to_parent     local坐标转parent坐标

to_window    local坐标转window坐标

以下为测试代码

#coordinate.kv

 1 from kivy.app import App
 2 from kivy.uix.boxlayout import BoxLayout
 3
 4
 5 class MainScreen(BoxLayout):
 6     def btnright(self,obj):
 7         param = list(obj.pos)
 8         param.append(False)
 9         print ‘Right: {}‘.format(self.ids.btn2.to_parent(*param))
10
11 class TestApp(App):
12     def build(self):
13         return MainScreen()
14 if __name__ == "__main__":
15     TestApp().run()

#test.kv

<MainScreen>:
    Label:
        text: ‘Left‘
    Button:
        text: ‘Middle‘
        on_touch_down: print(‘Middle: {}\n‘.format(args[1].pos))
    RelativeLayout:
        on_touch_down: print(‘Box: {}‘.format(args[1].pos))
        Button:
            id:btn2
            text: ‘Right‘
            on_touch_down: root.btnright(args[1])
时间: 2024-10-06 16:17:40

kivy学习之路--坐标系和坐标转换函数的相关文章

C++学习之路:纯虚函数

背景: 当有些方法无法继承,或者说无意义的时候,例如shape类,那么基类的接口便无法实现. 那么这时候就需要引入纯虚函数. 几何基类:       Shape 拥有Draw方法,三角,圆形,菱形等Draw方法各不相同.只能使用纯虚函数, 拥有纯虚函数的基类称为抽象类,抽象类无法被实例化,纯虚函数也不需要实现. @纯虚函数的定义 #纯虚函数一般不需要实现.   @抽象类   作用:抽象类作为抽象和设计的目的而声明,将有关的数据和行为组织在一个集成层次结构中,保证派生类具有要求的行为.   对于暂

python学习之路-4 内置函数和装饰器

本篇涉及内容 内置函数 装饰器 内置函数 callable()   判断对象是否可以被调用,返回一个布尔值 1 2 3 4 5 6 7 8 9 10 11 num = 10 print(callable(num))   # num不能够被调用,返回False    def f1():     print("name")    print(callable(f1))     # f1可以被调用,返回True    # 输出 False True ?chr()   将十进制整数转换为asc

kivy学习之路--开发环境架设之linux篇

这是初稿,应该会进一步修改,毕竟图文并茂更好食用,建议和意见尽管评论吧,一起进步!上一篇在51cto上面,以后应该会都在这里发了,51cto的博客编辑系统真是磨人的小妖精 0x01 系统配置 系统和python参数 Linux gnu-VirtualBox 3.16.0-23-generic #31-Ubuntu SMP Tue Oct 21 18:00:35 UTC 2014 i686 i686 i686 GNU/Linux Python 2.7.8 Lubuntu 14.10 0x02  安

python学习之路-第三天-函数

函数 函数的定义关键字:def 使用global语句可以清楚地表明变量是在外面的块定义的 示例:(函数运行完毕后x的值是2) #!/usr/bin/python # Filename: func_global.py def func(): global x print 'x is', x x = 2 print 'Changed local x to', x x = 50 func() print 'Value of x is', x 可以给形参加上默认值,默认参数是不可变的,而且只有在形参表末

python学习之路(二) -- 函数、JSON、终端样式

函数 函数构成 定义函数:使用def即可 def __getName(idCard): return user_info[idCard].Name 其中,__getName即函数的名字,包含一个参数idCard 如果需要有返回值,return即可 def __test(): print(a) return print(b) 上述函数即不包含返回值,return只是表示函数终止,即仅输出a 函数调用 调用方式也很简单:functionName(para_A,para_B....) 参数 参数类型:

linux学习之路之函数的使用

什么是函数呢? 函数就是将一些代码封装起来,实现代码重用的功能 函数是不能独立运行的,只有函数调用时才可以执行,而且可以调用多次 使用函数的好处可以避免代码多次重复使用,是程序代码更具有结构性. 那么该如何定义函数呢? 定义函数有二种结构 结构一: function FUNCNAME { COMMAND } 其中function为关键字,FUNCNAME为函数名,COMMAND为函数体内执行的命令 结构二: FUNCNAME() { COMMAND } 其中FUNCNAME为函数名 我们说过函数

IOS学习之路-- 指针&amp;宏函数

如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p

OpenGL学习之路(四)

1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器程序传入输入参数. 这次读书笔记的内容相对有趣一些,主要是和园友们分享讨论三维坐标变换矩阵在三维几何体上的应用,以及介绍一下如何实现三维图形与用户操作的交互.这一次笔记在三维编程中也是非常重要的——我们最后开发的三维程序最终就是要和目标用户进行交互的. 之前一直没有在博客上放过gif格式的动画图片,

OpenGL学习之路(五)

1 引子 不知不觉我们已经进入到读书笔记(五)了,我们先对前四次读书笔记做一个总结.前四次读书笔记主要是学习了如何使用OpenGL来绘制几何图形(包括二维几何体和三维几何体),并学习了平移.旋转.缩放坐标变换矩阵的理论推导和实践应用. 这一次读书笔记,我们一起来学习OpenGL中常用的坐标系以及坐标变换.在OpenGL中有几个坐标系,初学者常常被它们搞得晕头转向:为什么需要这些坐标系?各个坐标系有什么作用?……本文就来学习一下这些OpenGL中常用坐标系. 之后来看看投影矩阵的推导,投影变换矩阵