Kivy 简单尝试
Kivy 简明教程
首先,有两个网址你不得不看:
Kivy: Cross-platform Python Framework for NUI
在官网逛逛,顺便看看最下面的代码,try to run it.https://www.youtube.com/playlist?list=PLQVvvaa0QuDe_l6XiJ40yGTEqIKugAdTy
sentdex大神的入门级教程。
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('''
<OneScreen>
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('''
<OneScreen>
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('''
<OneScreen>
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('''
<OneScreen>
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('''
<ScreenManager>:
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('''
<ScreenManager>:
HomeScreen
AnotherScreen
<HomeScreen>:
name: 'home'
Button:
text: 'Go to another screen'
on_release: root.manager.current = 'another'
<AnotherScreen>:
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
<RootWidget>
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('''
<OneScreen>
Label:
text: app.saying
''')
class OneScreen(Screen):
pass
class TestApp(App):
def __init__(self, **kwargs):
self.saying = 'I was read from app instance.'
super(OneScreen, self).__init__(**kwargs)
def build(self):
return OneScreen()
TestApp().run()
五阶段:Show time!
还想什么呢?赶紧动手写程序吧~
For more information, you can go and see:
Kivy 简单尝试的更多相关文章
- 简单尝试Spring Cloud Gateway
简单尝试Spring Cloud Gateway 简介 Spring Cloud Gateway是一个API网关,它是用于代替Zuul而出现的.Spring Cloud Gateway构建于Sprin ...
- Python 开发安卓Android及IOS应用库Kivy安装尝试
Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package f ...
- python+selenium 简单尝试
前言 selenium是一种自动化测试工具,简单来说浏览器会根据写好的测试脚本自动做一些操作. 关于自动化测试,一开始接触的是splinter,但是安装的时候发现它是基于selenium的,于是打算直 ...
- react-native学习笔记——简单尝试
毫无疑问,我是个不善于写博文的人. 毫无疑问,react是个出的框架. 毫无疑问,react-native更是个牛逼的引擎. 我个人对react-native的理解就是js被js引擎编译,去调用本地语 ...
- 关于MS12-020一次简单尝试
由于之前着重于web漏洞,主机漏洞这块比较薄弱.也没有用过metasploit,对于很多系统漏洞还不熟悉,正好这几天不忙,就想着慢慢学习,再写点简单的东西,进行总结记录. 这次尝试的是MS12-020 ...
- 简单尝试利用vultr vps自架PPTP上网用于工作学习需要
因为学习和工作的需要用到登陆海外网站查阅相关的资料和文档,之前有需要使用的时候是问网友索要的账户登录本地电脑拨号的,但是老是跟别人要还是不好,决定自己尝试搭建一个长期使用.看到有不少的介绍提到VULT ...
- SQLMap简单尝试
第一次完成了一个注入呢,虽然是恬不知耻的用sqlmap跑出来的 简单介绍注入时后台的数据等级,有助于后面的理解 ①可以类比成一个装着excel文件的文件夹,每一个excel文件就相当于一个数据库 ②库 ...
- 基于node.js的爬虫框架 node-crawler简单尝试
百度爬虫这个词语,一般出现的都是python相关的资料. py也有很多爬虫框架,比如scrapy,Portia,Crawley等. 之前我个人更喜欢用C#做爬虫. 随着对nodejs的熟悉.发现做这种 ...
- 利用 ROP 技术绕过 DEP 保护的一次简单尝试
\x 01 前言 DEP是数据执行保护的英文缩写,全称为Data Execution Prevention.数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意 ...
随机推荐
- hive数据类型1
- 代码格式化工具 AStyle
Astyle是一个用来对C/C++代码进行格式化的工具,在windows或者linux都有对应的版本,下面介绍几个本人比较常用的参数 --style=linux 个人比较喜欢linux风格,即函数的 ...
- TextInput组件的常用属性
1.TextInput组件基本介绍: TextInput是一个允许用户在应用中通过键盘输入文本的基本组件.本组件的属性提供了多种特性的配置,譬如自动完成.自动大小写.占位文字,以及多种不同的键盘类型( ...
- vue build后 less sass background-img找不到文件
修改build下面的utils.js配置 if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, publicP ...
- EF中where中日期帅选问题
结合 SqlFunctions 和 DbFunctions 不能同时用两个DbFunctions queryAble = queryAble.Where(s=> SqlFunctions.D ...
- 用事件队列来处理pixi中的场景元素入场
在pixi中,添加一个精灵元素,你可能需要,先将贴图load进来,然后才能添加到场景中去,所以一般会这么操作 Loader.add("tree","static/imag ...
- Python3 Selenium自动化web测试 ==> 第六节 WebDriver高级应用 -- 操作web页面的滚动条
学习目的: 掌握页面元素定位以外的其他重要知识点. 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver fr ...
- LeetCode刷题2——颠倒二进制位
一.题目要求 二.题目背景 此题依旧属于位运算范畴 知识点1:有符号和无符号二进制是怎样表现的? 对于有符号数,最高位为1说明是个负数 知识点2:进制之间的相互转换 (1)十进制转十六进制 hex(n ...
- Exchange2010---反垃圾邮件配置
Exchange2010---反垃圾邮件配置 Exchange2010---反垃圾邮件配置 本文以Exchange Server 2010作为反垃圾邮件配置实例为例. 其实,在微软发布的Exc ...
- cobaltr strike入门使用教程-1
前言 Cobalt Strike分为服务端和客户端两个部分从而实现分布式操作,协同作战.工具有linux和windows版本. 1.创建服务端 找到解压目录进入 ./teamserver [IP] [ ...