当前位置:   article > 正文

Python + kivy_python kivy

python kivy

关于 python kivy 学习记录

kivy的安装

创建虚拟环境

安装virtualenv

pip install virtualenv
  • 1

命令行cd切换的指定目录,并创建虚拟环境

virtualenv kivy-demo-env
  • 1

然后在虚拟环境文件夹同级目录下新建项目,创建一个空文件夹(kivy-demo),打开PyCharm并打开刚刚创建的空文件夹,指定解释器。
打开PyCharm的设置界面,选中Project Interpreter,单击右上角的设置按钮,再选择Add ,添加解释器
选择Existing environment 将路径指向前一步创建的虚拟环境下的Scripts文件夹下的python.exe文件,之后单击OK按钮完成。
解释器设置完成后,在pycharm的底部打开terminal,如果显示了刚刚创建的虚拟环境名称(kivy-demo-env)就表示python解释器设置成功。

安装kivy
#安装依赖

pip install docutils pygments pypiwin32 kivy_deps.sdl2==0.1.22 kivy_deps.glew==0.1.12
  • 1

#两种方式

pip install kivy_deps.gstreamer==0.1.17
  • 1
pip install kivy_deps.angle==0.1.9
  • 1

#安装kivy

pip install kivy==1.11.1
  • 1

Hello World!

# 导入kivy的app类
from kivy.app import App
# 导入控件
from kivy.uix.label import Label
# 导入布局
from kivy.uix.boxlayout import BoxLayout

class HelloPage(BoxLayout):
	#初始化
	def __init__(self, **kwargs):
		super().__init__(**kwargs)
		# 添加一个Label
		self.lab = Label(text='Hello World!')
		# 将标签添加到页面控件中
		self.add_widget(self.lab)
class HelloApp(App):
	# 继承App类,实现build()方法
	def build(self):
		# build()方法返回的控件,在kivy中称为根控件(root widget)
		# kivy将自动缩放根控件,
		return HelloPage()
if __name__ == '__main__':
	# 启动应用
	HelloApp().run()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述

python文件+.kv文件实现 Hello World

#hello.py文件

# 导入kivy的app类
from kivy.app import App
# 导入布局
from kivy.uix.boxlayout import BoxLayout
# 布局
class HelloPage(BoxLayout):
	# 初始化
	def __init__(self, **kwargs):
		super().__init__(**kwargs)
# 继承App类
class HelloApp(App):
	# 实现App类的build()方法
	def build(self):
		# 返回根控件
		return HelloPage()

if __name__ == '__main__':
	# 启动应用
	HelloApp().run()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

#hello.kv文件

.kv文件是不可以随意命名的,在启动应用后,kivy会自动查找App类名同名的小写的.kv文件(例如:class Hello App(App):、kivy查找小写hello.kv文件)

<HelloPage>:
	Label:
		text:'Hello World!'
  • 1
  • 2
  • 3

页面布局

kivy主要的布局方式

浮动布局:FloatLayout
盒子布局:BoxLayout
锚点布局:AnchorLayout
网格布局:GridLayout
多页面布局:PageLayout
相对布局:RelativeLayout
分散布局:ScatterLayout
堆栈布局:StackLayout

大小和位置

大小:对于控件大小的控制
size属性

使用size属性需要指定宽和高的固定值,并且si’ze_hint属性必须设置为None,None
例如:

Button:
	text:'hello'
	size: 100, 100
	size_hint: None, None
  • 1
  • 2
  • 3
  • 4

size_hint属性

设定值必须为0~1之间,表示控件的宽与当前窗口的宽的比例值,例如[0.1, 0.15]

Button:
	text:'world'
	size_hint:[0.1, 0.15]
  • 1
  • 2
  • 3

位置:对于控件位置的控制

pos属性
直接指定具体的值,例如:[100,200]
注意:只有浮动布局FloatLayout才生效

pos_hint属性
通过比例值(0~1之间的值)进行设置
对于一个控件来说,
x轴上:左边界x线、正中间center_x线、右边界right线
控件x边界线,距离x轴的比例
y轴上:上边界top线、正中间center_y线、下边界y线
pos_hint通过一个字典值设定,例如:{‘center_x’:0.5, ‘y’:0.1}

<HelloPage>:
	Button:
		text:'hello'
		size_hint:0.1, 0.2
		pos_hint:{'center':0.3, 'top':0.75}
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


在这里插入图片描述在这里插入图片描述
在这里插入图片描述
释(简单理解):
x轴上:左边界x线、正中间center_x线、右边界right线
控件左边界线x,距离x轴的比例
控件正中线,距离x轴的比例
控件右边界线,距离x轴的比例

y轴上:上边界top线、正中间center_y线、下边界y线
控件上边界线,距离y轴的比例
控件正中线,距离y轴的比例
控件下边界线y,距离y轴的比例

FloatLayout 浮动布局

浮动布局,允许将子部件通过位置和尺寸放置在窗口的任意位置。使用FloatLayout时,可以根据当前窗口的大小和高度放置小部件。
使用size_hint属性、pos属性或pos_hint属性

当添加多个按钮都有重复的属性时,可以将其公共属性提取出来生成一个自定义的按钮,例如:
#设定相同字体大小,相同控件大小

<Button>:
	font_size:50
	size_hint:0.2, 0.2
<FloatLayout>:
	Button:
		text:'hello1'
		background_color:0.2, 0.2, 0.5, 1
		pos_hint:{'x':0, 'top':1}
	Button:
		text:'hello2'
	Button:
		text:'hello3'
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

BoxLayout 盒子布局

将子部件水平或垂直排列的布局。如果不设置任何大小【size_hint】,子部件将会以10像素的间距平分父窗口的大小
BoxLayout布局,默认使用水平horizontal排列的方式。通过指定orientation属性设置方向。例如垂直方向,orientation:‘vertical’

<BoxLayout>:
	orientation:'vertical'
	Button:
		text:'hello'
	Button:
		text:'vertical'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

总结:
orientation属性:设置排列方向,水平或垂直

# 水平
orientation:'horizontal'
# 垂直
orientation:'vertical'
  • 1
  • 2
  • 3
  • 4

height:指定布局高度
width:指定布局宽度

padding属性:布局和子级之间填充(间距)默认[0,0,0,0]
spacing属性:子级和子级直接填充(间距)默认为0

padding的四个参数分别为[padding_left, padding_top, padding_right, padding_bottom],分别表示左边距、上边距、右边距、下边距
padding:[10, 20, 30, 40]
同时padding还接受两个参数的形式[padding_horizontal, padding_vertical],分别表示水平边距,垂直边距padding:[30, 50]
或者一个参数的形式[padding]表示周围边距padding: 30。

AnchorLayout 锚点布局

可以将子部件设置在左上、中上、右上、左中、正中、右中、左下、中下、右下。使用方法,只需指定两个属性,两个属性默认都是’center’

AnchorLayout:
	anchor_x:'left'
	anchor_y:'top'
  • 1
  • 2
  • 3

GridLayout 网格布局

将子部件排列成多行多列的矩阵,使用方法:必须设置具体的列数(cols)或者行数(rows)任意一个

GridLayout:
	cols:3
	Button:
		text:'one'
	Button:
		text:'two'
	Button:
		text:'three'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

网格布局也可以为部件指定大小,使用col_force_default属性,默认值为False,表示不使用列默认宽度,设置为True时,当子级未设置width和size_hint_x属性时,使用默认的列宽。列宽的默认值是0,使用col_default_width属性设置默认列宽

GridLayout:
	cols:3
	col_force_default:True
	col_default_width:110
	Button:
		text:'one'
	Button:
		text:'two'
	Button:
		text:'three'
	Button:
		text:'four'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

同样方法设置默认行高,row_force_default和row_default_height属性

针对每一列、每一行设置各自的宽度和高度
cols_minimum属性设置列宽,例如第一列设置120px, 第二列设置150px,第三列设置160px:

cols_minimum:{0:120, 1:150, 2:160}
  • 1

rows_minimum属性设置行高,例如第一行设置30px, 第二行设置50px,第三行设置60px:

rows_minimum:{0:30, 1:50, 2:60}
  • 1

PageLayout 多页面布局

由于该布局将每个子部件都作为一个单独的页面,所以不支持size_hint和pos_hint属性

基本属性
border属性:可以指定边界的大小,默认为50
page属性:设置当前页面默认显示哪一页
swipe_threshold属性:设置翻页的灵敏度
anim_kwargs属性:设置翻页动画与持续时间

<PageLayout>:
	border:'100dp'
	page:2
	anim_kwargs:{'d':10, 't':'linear'}
	swipe_threshold:0.9
	Button:
		text:''
	Button:
		text:''
	Button:
		text:''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

RelativeLayout 相对布局

布局操作方式与FloatLayout布局基本一致,但是它的定位属性x、center_x、right、y、center_y、top是相对于父布局的大小,而不是窗口的大小。

ScatterLayout 分散布局

与相对布局类似,
由于该布局主要由Scatter小部件来实现,所以可以进行平移、旋转、缩放布局(一般布局图片)

ScatterLayout:
	Image:
		source:'picture.jpg'
  • 1
  • 2
  • 3

StackLayout 堆栈布局

只要不超过布局的范围,就可以进行垂直或水平的排列子项,并且各个小部件的大小可以不必相同。StackLayout布局可以通过orientation属性指定布局方向,默认值为’lr-tb‘,表示从左往右排列,从上往下排列

使用padding属性和spacing属性控制布局和部件,部件和部件的间距
padding属性有三种参数形式【左,上,右,下】【水平间距,垂直间距】【四周间距】
spacing属性有两种参数形式【水平间距,垂直间距】【四周间距】

使用minimum_size属性设置最小尺寸
使用minimum_height属性设置最低高度

####clock
在这里插入图片描述

总结:
书面上写的属性比较凌乱,不全面,哪个布局都有哪些属性可以使用后期有空再整理一份详细的

图形绘制

省略…

简单的ux部件

省略…

高级ux部件

省略…

打包

Windows打包

#(百度翻来的–书本描述看不懂)
安装PyInstaller

pip install pyinstaller
  • 1

生成SPEC文件,main.py为主程序入口文件
#-F表示覆盖原先生成的spec文件

pyi-makespec -F main.py 
  • 1

打包生成EXE, 会生成build,dist两个目录, main.exe将在dist目录

pyinstaller main.spec 
  • 1

#遇到问题,安装pillow后好了
Unable to load image

pip uninstall pillow
pip install pillow
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/631731
推荐阅读
相关标签
  

闽ICP备14008679号