【个人kivy学习笔记】

环境配置

安装Virtualenv

打开CMD

安装virtualenv

	pip install virtualenv

切换目录
切换到你的工作位置

创建虚拟环境

	virtualenv kv-demo-env 

kv-demo-env是解释器

为编译器设置虚拟环境解释器

安装Kivy

(如需版本更替,只需将对应依赖项版本号更改为所需版本号即可)
安装依赖项

	python -m pip install docutils pygments pypiwin32 kivy_deps.sdl2==0.1.22 kivy_deps.glew==0.1.12

安装gstreamer

	python -m pip install kivy_deps.gstreamer==0.1.17

安装angle

	python -m pip install kivy_deps.angle==0.1.9

安装Kivy

	python -m pip install kivy==2.0.0

安装示例

	python -m pip install kivy_examples=1.11.1

大小与位置

大小

size_hint的值(0~1),可以将控件的大小设置为当前窗口的比值

size用于将一个控件的大小固定,所以需要width,height的值
(注: 使用时需要将size_hint设置为[None,None])

位置

pos_hint可以将位置以一个字典比值(0~1)来设置(以窗口左下角作为起点(0,0)).
控件有三条线左边界x线,正中间center_x线,右边界right线,
y轴有上边界top线,正中间center_y线,下边界y线,
x,y线可以随意组合
如:pos_hint:{‘center_x’:0.5, ‘y’:0.7}

pos以对应数值(x,y)在当前窗口内寻找对应的点

八大布局

布局通用属性

属性说明
padding布局与子控件之间各方向填充值[value, value, value, value]
spacing子控件与子控件之间填充值Value
boder可以指定边界大小Value
col_force_default是否强制使用默认列宽Bool
col_default_width设置默认列宽Value
row_force_default是否强制使用默认行高Bool
row_default_width设置默认行高Value

FloatLayout布局

作为浮动布局,它允许子部件以位置和尺寸放在窗口的随意位置,其优点是可以跟随设置分辨率自动调整大小,不会使你的布局看起来乱七八糟.

代码示例:

py文件

from kivy.app import App

from kivy.uix.floatlayout import FloatLayout


class FloatLayoutWidget(FloatLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

class FloatApp(App):
    def build(self):
        return FloatLayoutWidget()


if __name__ == "__main__":
    FloatApp().run()

kv文件:

<BoxLayoutWidget>:
    Button:
        text:'bt0'
        background_color:0,1,1,1
        font_size:40
    Button:
        text:'bt1'
        background_color:0,1,0,1
        font_size:35
    Button:
        text:'bt2'
        background_color:0,0,1,1
        font_size:30
    Button:
        text:'bt3'
        background_color:1,0,1,1
        font_size:25
    Button:
        text:'bt4'
        background_color:1,0,0,1
        font_size:20

BoxLayout布局

盒子布局,可以(使用orientation)将子控件排版成水平排列(horizental)垂直排列(vertical)的布局,如不设置任何大小,子控件会以10像素的间距平分父控件

padding与spacing适用所有布局

布局与子控件之间填充需使用padding,默认为[0,0,0,0]
子级和子级之间填充需使用spacing,默认为0

代码示例:

py文件:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class BoxLayoutWidget(BoxLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)

class BoxApp(App):
    def build(self):
        return BoxLayoutWidget()


if __name__=="__main__":
    BoxApp().run()

kv文件:

<BoxLayoutWidget>:
    orientation:'vertical'
    padding:[10,40,40,30]

    Button:
        text:'bt0'
        background_color:0,1,1,1
        font_size:40
    Button:
        text:'bt1'
        background_color:0,1,0,1
        font_size:35
    Button:
        text:'bt2'
        background_color:0,0,1,1
        font_size:30
        
    BoxLayout:
        orientation:'vertical'
        spacing:20

        Button:
            text:'bt3'
            background_color:1,0,1,1
            font_size:20
        Button:
            text:'bt4'
            background_color:1,0,0,1
            font_size:20

AnchorLayout布局

锚点布局,可以(使用anchor_x和anchor_y设置位置)将子控件设置在
左上 中上 右上
左 中间 右
左下 中下 右下
九个位置上,注意:当设置位置后,同时添加两个子控件,会使两个子控件叠在一起

代码示例:

py文件:

from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout


class AnchorLayoutWidget(AnchorLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

class AnchorApp(App):
    def build(self):
        return AnchorLayoutWidget()


if __name__ == "__main__":
    AnchorApp().run()

kv文件:

<AnchorLayoutWidget>:

    AnchorLayout:
        anchor_x:'right'
        anchor_y:'top'
        Button:
            text:'right and top'
            size_hint:.2,.2

    AnchorLayout:
        anchor_x:'left'
        anchor_y:'bottom'
        Button:
            text:'left and bottom'
            size_hint:.2,.2

GridLayout布局

网格布局

,可以(使用列cols和行rows)将子控件设置成多行多列的矩阵,
注意:如果你不单一设置大小它们会很整齐

代码示例:

py文件:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout

class GridLayoutWidget(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


class GridApp(App):
    def build(self):
        return GridLayoutWidget()



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

kv文件:

<GridLayout>:
	padding:30
	spacing:30
# 可以将cols或rows的值修改查看效果
	cols:3

	col_force_default:True
	col_default_width:120
	row_force_default:True
	row_default_width:40	
	
	Button:
		text:'1'
		size_hint_x:None
		width:100px
	Button:
		text:'2'
	Button:
		text:'3'		
	Button:
		text:'4'	

PageLayout布局

分页布局,该布局的每个子控件都视为一个单独的界面,所以不支持使用size_hint和pos_hint
使用page可以设置默认先显示哪一页
swipe_threshold设置翻页灵敏度
anim_kwargs设置翻页动画和持续时间

border可以指定两边边界大小,默认50dp

代码示例:

py文件:

from kivy.app import App
from kivy.uix.pagelayout import PageLayout

class PageLayoutWidget(PageLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

class PageApp(App):
    def build(self):
        return PageLayoutWidget()

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

kv文件:

<PageLayoutWidget>:
	anim_kwargs:{'d':10,'t':'linear'}
	page:2
	border:'100dp'
	swipe_threshold:.8
	
	BoxLayout:
		Button:
			text:'page 1'
			background_color:(0.3,0.3,0.3,1)
	BoxLayout:
		Button:
			text:'page 2'
			background_color:(.9,.3,.3,1)
	BoxLayout:
		Button:
			text:'page 3'
			background_color:(.3,.9,.3,1)
	BoxLayout:
		Button:
			text:'page 4'
			background_color:(.3,.3,.9,1)

RelativeLayout布局

相对布局,它的定位属(x,y,conter_x.conter_y,right,top)性是相对于父控件的大小,而不是窗口大小
注:RelativeLayout不可以直接作为窗口创建

代码示例:
为了展示新技巧,单独使用py完成
py文件:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.boxlayout import BoxLayout
from kivy,graphics import Rectangle,Color

class MyButton(Button):
	def __init__(self,**kwargs)
		super().__init__(**kwargs)
		self.font_size = 20
		self.size_hint = [0.2,.2]
		
class BoxLayoutWidget(BoxLayout):
	def __init__(self,**kwargs)
		super().__init__(**kwargs)
		
		with self.canvas:
			Color(1,1,1,1)
			self.rect = Rectangle(pos=self.pos,size=self.size)
			self.bind(pos=self.update_rect,size=self.update_rect)
		relative = RelativeLayout()
		bt0 = MyButton(text='bt0',pos_hint={'right':1, 'top':1},background_color=(.2,.5,.4,1))
		bt1 = MyButton(text='bt1',pos_hint={'x':0,'top':1},background_color=(.5,.3,.2,1))
		bt2 = MyButton(text='bt2',pos_hint={'center_x':.5,'center_y':.5},background_color=(.4,.2,.2,1))
		bt3 = MyButton(text='bt3',pos_hint={'x':0,'y':0},background_color=(.8,.7,.2,1))
		bt4 = MyButton(text='bt4',pos_hint={'right':1,'y':0},background_color=(.4,.9,.3,1))
		
		for i in [bt0,bt1,bt2,bt3,bt4]:
			relative.add_widget(i)
		self.add_widget(BoxLayout())
		self.add_widget(relative)
	
	def update_rect(self,*args):
		self.rect.pos = self.pos
		self.rect.size = self.size

class RelativeApp(App):
	def build(self):
		return BoxLayoutWidget()

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

ScatterLayout布局

未完待续…
下班
有没有一起学的

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值