几个月不写中文了, 感觉还行。 So, let's begin our journey.

首先,有两个网址你不得不看:

Kivy总体思想是:kv代码管界面,python代码管逻辑。

然后重点来了, 我主要讲三件事:(kv访问Python;Python访问kv;窗口)。

一阶段:

1.Python访问kv

Python可以直接调用kv代码。如:

from kivy.app import App

from kivy.lang import Builder

kv = Builder.load_string('''

Button:

text: "I was created by kv codes"

''')

class TestApp(App):

def build(self):

return kv

TestApp().run()

2.窗口

kv代码中被<>包裹住的是某个class的名字,这个class需在python代码中声明,它们代表同一个class。

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen

Builder.load_string('''

Label:

text: "My mother screen was created by kv and python codes."

''')

class OneScreen(Screen):

pass

class TestApp(App):

def build(self):

return OneScreen()

TestApp().run()

3. kv访问Python

在.kv文件或kv代码里,root只代表其上层被<>包裹住的类。如:

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen

Builder.load_string('''

Button:

text: 'Click me'

on_release: print(root.__class__)

''')

class OneScreen(Screen):

pass

class TestApp(App):

def build(self):

return OneScreen()

TestApp().run()

二阶段:

1. kv访问Python

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen

Builder.load_string('''

BoxLayout:

Button:

text: 'Click me'

on_release: root.do_something()

Button:

text: 'Who made this?'

on_release: print(root.author)

''')

class OneScreen(Screen):

def __init__(self, **kwargs):

self.author = 'yingshaoxo'

super(OneScreen, self).__init__(**kwargs)

def do_something(self):

print('2333')

class TestApp(App):

def build(self):

return OneScreen()

TestApp().run()

2. Python访问kv

你需要给kv组件一个id,用以标明其唯一性。再使用ids方法调用它。如:

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen

Builder.load_string('''

BoxLayout:

Button:

id: one_ask

text: 'Who made this?'

on_release: root.do_something()

''')

class OneScreen(Screen):

def __init__(self, **kwargs):

self.author = 'yingshaoxo'

super(OneScreen, self).__init__(**kwargs)

def do_something(self):

self.ids['one_ask'].text = self.author

class TestApp(App):

def build(self):

return OneScreen()

TestApp().run()

3. 窗口

As far as I see,在做程序的时候,你会遇到很多窗口。所以ScreenManager这时候派上用场了。

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import ScreenManager

Builder.load_string('''

:

Screen:

name: 'home'

Button:

text: 'Go to another screen'

on_release: root.current = 'another'

Screen:

name: 'another'

Button:

text: "Go back home"

on_release: root.current = 'home'

''')

class ScreenManager(ScreenManager):

pass

class TestApp(App):

def build(self):

return ScreenManager()

TestApp().run()

三阶段:

1+2. 窗口、kv访问Python

In fact, 你可以把ScreenManager看成一个很大的widget。

但如果所有的数据操作(root.function)都在一个 ScreenManager class里做的话显然不科学。

所以我们最好把每个窗口都在Python里声明一个class,这样既可以有程序启动时的总操作,又可以有各个子窗口的分操作。看示例:

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_string('''

:

HomeScreen

AnotherScreen

:

name: 'home'

Button:

text: 'Go to another screen'

on_release: root.manager.current = 'another'

:

name: 'another'

Button:

text: "Go back home"

on_release: root.manager.current = 'home'

''')

class ScreenManager(ScreenManager):

pass

class HomeScreen(Screen):

pass

class AnotherScreen(Screen):

pass

class TestApp(App):

def build(self):

return ScreenManager()

TestApp().run()

我们可以看到示例不光在kv代码中绑定了两个Screenclass,还引用了一个root.manager。没错,那是从screen class得到screenmanager class的方法。

3. Python访问kv

直接用kv代码预先定义控件(如按钮)的行为有时不能满足我们的需求,于是我们可能需要临时改变按钮的行为:

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen

from time import gmtime, strftime # this equls cv codes #...

Builder.load_string("""

#:import gmtime time.gmtime

#:import strftime time.strftime

BoxLayout:

orientation: 'vertical'

Button:

id: change_itself

text: 'I can change myself'

on_release: root.ids['change_itself'].text = strftime("%a, %d %b %Y %H:%M:%S", gmtime())

Button:

id: change_all

text: 'I can change our behavior'

on_release: root.change_all()

""")

class RootWidget(Screen):

def change_all(self):

print(self.ids)

for instance_class in self.ids.values():

instance_class.text = 'Exit'

instance_class.bind(on_release=exit)

class TestApp(App):

def build(self):

return RootWidget()

if __name__ == '__main__':

TestApp().run()

四阶段:

1. kv访问Python

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen

Builder.load_string('''

Label:

text: app.saying

''')

class OneScreen(Screen):

pass

class TestApp(App):

def __init__(self, **kwargs):

self.saying = 'I was read from app instance.'

super(TestApp, self).__init__(**kwargs)

def build(self):

return OneScreen()

TestApp().run()

五阶段:Show time!

还想什么呢?赶紧动手写程序吧~

For more information, you can go and see:

python kivy教程_Kivy 简明教程相关推荐

  1. Python re(正则表达式)简明教程

    Python re(正则表达式)简明教程(Python3) 举个栗子 常用函数举例 按字母顺序查询模块

  2. 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)

    目录 十二.Python爬虫的Xpath简明教程(十分钟入门) 12.1 Xpath表达式 12.2 Xpath节点 12.3 节点关系 12.4 Xpath基本语法 12.4.1 基本语法使用 12 ...

  3. 简明python教程pdf-python简明教程中文pdf

    python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...

  4. python 三引号_Python 简明教程 --- 4,Python 变量与基本数据类型

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 任何一个人都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码. -- Marti ...

  5. python wasm_Go WebAssembly (Wasm) 简明教程

    Go WebAssembly (Wasm) 简明教程 1 WebAssembly 简介WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二 ...

  6. 计算机 电工学简明教程,电工学简明教程复习要点

    <电工学简明教程复习要点>由会员分享,可在线阅读,更多相关<电工学简明教程复习要点(88页珍藏版)>请在人人文库网上搜索. 1.本章要求掌握1 .旁路电流法.叠加原理.达宾定理 ...

  7. zerotier使用教程_zerotier简明教程

    zerotier简明教程 最近使用zerotier替换了frp来实现内网穿透,zerotier是一个软交换机,使用zerotier可以让多台内网机器组成一个局域网. 首先要安装 zerotier-on ...

  8. python编写异常处理_Python 简明教程 --- 23,Python 异常处理

    要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...

  9. python的表达式3or5_Python 简明教程 --- 5,Python 表达式与运算符

    靠代码行数来衡量开发进度,就像是凭重量来衡量飞机制造的进度. -- Bill Gates 目录 1,什么是表达式 表达式是代码的重要组成部分,一个表达式由运算符和操作数两部分组成. 一个表达式就描述了 ...

最新文章

  1. 2016年科技阅读列表
  2. 银河足球队 android 8,银河足球队手机版_银河足球队安卓游戏v1.0.1-游迅网
  3. sqlsever2008数据库的备份与还原
  4. asp.net ajax检查用户名是否存在代码
  5. 1007 素数对猜想 (20分)
  6. Nexus搭建Maven服务器
  7. 快速配置 Samba 将 Linux 目录映射为 Windows 驱动器
  8. 1085. Perfect Sequence (25)-PAT甲级真题
  9. php输出单行,file - php如何随机输出文件内一行?
  10. c++ 小游戏 NO 4 eye
  11. ECharts学习--雷达图
  12. 正则表达式 -验证身份证号
  13. [转]VC知识库文章 - 在MFC中用正则表达式对窗体进行有效性验证
  14. 在recovery下挂载/system以使用adb
  15. 用VB创建一个对象数组
  16. 如何基于HTTP设计一个加密解密系统
  17. 难复制薇娅李佳琦,如涵的网红牌何时能在资本市场出奇制胜?
  18. Python中datetime.timedelta的应用
  19. 墨天轮沙龙 | 北京大学李文杰:面向知识图谱应用的图数据库系统gStore
  20. 拼多多2021高频题汇总 | 备战春招,刷这30题就够了!

热门文章

  1. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 167: illegal multibyte sequence
  2. mysql 存储过程 sql注入_存储过程是否可以防止SQL注入?
  3. 企业如何做好培训直播
  4. Tomcat部署多个war包
  5. VMware挂载共享盘
  6. 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏
  7. 音视频学习-H264帧基础知识
  8. AVRGCC常见库文件头文件介绍
  9. jar包反编译,查看源代码【转载】
  10. Linux Bonding