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学习笔记】相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. 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 ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(三)
  2. ORACLE物理DG日常管理
  3. python动态类型的坑_python进阶教程之动态类型详解
  4. C++_004异常处理
  5. 移动开发需要知道的像素知识『多图』
  6. 一文带你看懂物联网开源操作系统
  7. Forge Viewer 的协作审查如何使用
  8. linux 终端复用神器-tmux使用梳理
  9. Android studio3.5调用Numcpp库方法
  10. 2022最新RTMP+HTTP直播地址汇总(亲测可用)
  11. 内置RTK北斗高精度定位的智能安全帽完成调试,上报至smarteye平台
  12. 无法打开包括文件: “ui_XXX.h”: No such file or directory
  13. javascript 替换
  14. 银联在线支付--测试
  15. 和老外聊天、发邮件常用英语缩写(超实用)
  16. ui界面设计工具有哪些
  17. 【GitHub】GitHub上指定文件夹轻松下载
  18. 通过ssh远程启动linux上的Qt界面程序
  19. 稳压二极管串联电阻计算
  20. UI: 网易新闻实现

热门文章

  1. 问道gRPC_v1.0.0
  2. Inkspace 1.0 插件(3) 修改Python解释器路径
  3. 【微信小程序】搜索框样式
  4. 如何将自己电脑作为服务器将项目发布至外网
  5. 数字芯片后端设计——SRAM宏模块布局布线
  6. Foxtable筛选特定时间的行
  7. ⑥ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 OLED屏幕】
  8. Android中MPAndroidChart图表工具的常用方法(汇总)
  9. Echarts河北地图缺少雄安新区(合并、调整地图边缘)的解决办法
  10. python 英文月份转数字