zoukankan      html  css  js  c++  java
  • kivy学习---控件

    ------控件

    控件Widget是kivy图形界面中的基本元素。控件提供了一个画布canvas,这是用来在屏幕上进行绘制的。控件接收事件,并对事件作出反应。

    一个控件的子控件会以children属性的形式表达,这个属性是kivy中的一个列表属性ListProperty。可以用以下方法来操作控件树:

     ·add_widget():添加一个控件作为子控件

     ·remove_widget():从子控件列表中去掉一个控件

     ·clear_widget():清空一个控件的所有子控件。

    控件索引:控件绘制的顺序,是基于各个控件在控件树中获得位置。指定新增控件在控件树中的位置的方法为:root.add_widget(widget,index)

      注意:索引值小的控件会被绘制在索引值大的控件之上,默认值是0

    ------整理布局

    布局layout是一种能控制自己子控件尺寸和位置的控件。有各种不同的布局,使用尺寸推测size_hint位置推测pos_hint这两个属性来决定子控件children的尺寸size和位置pos

    盒式布局BoxLayout:所有控件充满整个空间,横竖排列都可以。子控件的size_hint属性可以用来改变每个子控件的比例,也可以设置为固定尺寸。

    网格布局GirdLayout:以一张网格的方式来安排控件。必须指定好网格的维度,确定好分成多少格,如此kivy才能计算出每个元素的尺寸并且确定如何安排这些元素的位置。

    栈状布局StackLayout:挨着放一个个控件,彼此邻近,在某一维度上有固定大小,而使它们充满整个空间,这适合用来显示相同预定义大小的子控件。 

    锚式布局AnchorLayout:一种非常简单的布局,只关注子控件的位置,将子控件放在布局的边界位置,不支持size_hint

    浮动布局FloatLayout:允许放置任意位置和尺寸的子控件,可以是绝对尺寸,也可以是相对布局的尺寸,默认的size_hint(1,1)会让每个子控件都与整个布局一样大,所以如果你多个子控件就需要修改这个值。可以把size_hint设置成(None,None),这样就可以使用size这个绝对尺寸属性,控件也支持pos_hint,这个属性是一个dict词典,用来设置相对布局的位置。

    相对布局RelativeLayout:与浮动布局FloatLayout相似,不同之处在于子控件的位置是相对于布局空间,而不是相对于屏幕

    size_hint是一个引用列表属性ReferenceListProperty,包括size_hint_x和size_hint_y两个变量。接收的变量值是从0到1的各种数值,或者None,默认值为(1,1)。这表示如果控件处在布局之内,布局将会在两个方向分配全部尺寸(相对布局大小)给该控件。

     在盒式布局中,当orientation被设置为竖直方向(vertical)的时候,size_hint_y由布局来控制;反之设置为水平方向(horizonttal)的时候,size_hint_x由布局控制,所以手动设置就无效了。

    -------给布局添加背景

    对布局实力添加一个色彩背景的方法如下:

     在python中的实现:

    具体设置布局背景颜色的python代码如下:

    from kivy.app import App
    from kivy.graphics import Color,Rectangle
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.button import Button

    class RootWidget(FloatLayout):
    def __init__(self,**kwargs):
    super(RootWidget,self).__init__(**kwargs)
    self.add_widget(
    Button(
    text="Hello world",
    size_hint=(.5,.5),
    pos_hint={"center_x":.5,"center_y":.5}))
    class MainApp(App):
    def build(self):
    self.root=root=RootWidget()
    root.bind(size=self._update_rect,pos=self._update_rect)
    with root.canvas.before:
    Color(0,0,1,1) #设置背景颜色,(红,绿,蓝,透明度)
    self.rect=Rectangle(size=root.size,pos=root.pos)
    return root
    def _update_rect(self,instance,value):
    self.rect.pos=instance.pos
    self.rect.size=instance.size
    if __name__=="__main__":
    MainApp().run()

    实现效果如下:

     ------给自定义布局规则/类增加背景色

    基于布局类Layout创建一个自定义的布局子类,可以给自定义的类增加一个背景。

    使用python的代码:


    from kivy.app import App
    from kivy.graphics import Color,Rectangle
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.image import AsyncImage
    class RootWidget(BoxLayout):
    pass
    class CustomLayout(FloatLayout):
    def __init__(self,**kwargs):
    super(CustomLayout,self).__init__(**kwargs)
    with self.canvas.before:
    Color(0,0,1,1)
    self.rect=Rectangle(size=self.size,pos=self.pos)
    self.bind(size=self._update_rect,pos=self._update_rect)
    def _update_rect(self,instance,value):
    self.rect.pos=instance.pos
    self.rect.size=instance.size
    class MainApp(App):
    def build(self):
    root=RootWidget()
    c=CustomLayout()
    root.add_widget(c)
    c.add_widget(
    AsyncImage(
    source="http://pic30.nipic.com/20130619/9885883_210838271000_2.jpg",
    size_hint=(1,.5),
    pos_hint={"center_x":.5,"center_y":.5}))
    root.add_widget(AsyncImage(source="http://pic1.win4000.com/wallpaper/c/53cdd1f7c1f21.jpg"))
    c=CustomLayout()
    c.add_widget(
    AsyncImage(
    source="http://pic32.nipic.com/20130813/3347542_160503703000_2.jpg",
    size_hint=(1,.5),
    pos_hint={"center_x":.5,"center_y":.5}))
    root.add_widget(c)
    return root
    if __name__=="__main__":
    MainApp().run()

    代码的运行结果如下:





  • 相关阅读:
    Word常用定义的变量
    Delphi对Word一些进阶操作
    Delphi 统计Word文档中的字数
    Delphi对Word的基本操作
    Spring3 MVC请求参数获取的几种方法
    Spring3系列13-Controller和@RequestMapping
    Spring3系列12-Spring AOP AspectJ
    Spring3系列11-Spring AOP——自动创建Proxy
    Spring3系列10-Spring AOP——Pointcut,Advisor拦截指定方法
    Spring3系列9-Spring AOP——Advice
  • 原文地址:https://www.cnblogs.com/suyun1219/p/11413332.html
Copyright © 2011-2022 走看看