【个人kivy学习笔记】
Kivy基础笔记
- 环境配置
- 安装Virtualenv
- 安装Kivy
- 大小与位置
- 大小
- 位置
- 八大布局
- FloatLayout布局
- BoxLayout布局
- AnchorLayout布局
- GridLayout布局
- PageLayout布局
- RelativeLayout布局
- ScatterLayout布局
环境配置
安装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 Appfrom kivy.uix.floatlayout import FloatLayoutclass 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,1font_size:40Button:text:'bt1'background_color:0,1,0,1font_size:35Button:text:'bt2'background_color:0,0,1,1font_size:30Button:text:'bt3'background_color:1,0,1,1font_size:25Button:text:'bt4'background_color:1,0,0,1font_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 BoxLayoutclass 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,1font_size:40Button:text:'bt1'background_color:0,1,0,1font_size:35Button:text:'bt2'background_color:0,0,1,1font_size:30BoxLayout:orientation:'vertical'spacing:20Button:text:'bt3'background_color:1,0,1,1font_size:20Button:text:'bt4'background_color:1,0,0,1font_size:20
AnchorLayout布局
锚点布局,可以(使用anchor_x和anchor_y设置位置)将子控件设置在
左上 中上 右上
左 中间 右
左下 中下 右下
九个位置上,注意:当设置位置后,同时添加两个子控件,会使两个子控件叠在一起
代码示例:
py文件:
from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayoutclass 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,.2AnchorLayout: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 GridLayoutclass 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:30spacing:30
# 可以将cols或rows的值修改查看效果cols:3col_force_default:Truecol_default_width:120row_force_default:Truerow_default_width:40 Button:text:'1'size_hint_x:Nonewidth:100pxButton: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 PageLayoutclass 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:2border:'100dp'swipe_threshold:.8BoxLayout: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,Colorclass MyButton(Button):def __init__(self,**kwargs)super().__init__(**kwargs)self.font_size = 20self.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.posself.rect.size = self.sizeclass RelativeApp(App):def build(self):return BoxLayoutWidget()if __name__ == '__main__':RelativeApp().run()
ScatterLayout布局
未完待续…
下班
有没有一起学的
【个人kivy学习笔记】相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
最新文章
- 专栏 | 基于 Jupyter 的特征工程手册:特征选择(三)
- ORACLE物理DG日常管理
- python动态类型的坑_python进阶教程之动态类型详解
- C++_004异常处理
- 移动开发需要知道的像素知识『多图』
- 一文带你看懂物联网开源操作系统
- Forge Viewer 的协作审查如何使用
- linux 终端复用神器-tmux使用梳理
- Android studio3.5调用Numcpp库方法
- 2022最新RTMP+HTTP直播地址汇总(亲测可用)
- 内置RTK北斗高精度定位的智能安全帽完成调试,上报至smarteye平台
- 无法打开包括文件: “ui_XXX.h”: No such file or directory
- javascript 替换
- 银联在线支付--测试
- 和老外聊天、发邮件常用英语缩写(超实用)
- ui界面设计工具有哪些
- 【GitHub】GitHub上指定文件夹轻松下载
- 通过ssh远程启动linux上的Qt界面程序
- 稳压二极管串联电阻计算
- UI: 网易新闻实现