kivy简介

kivy是一个开源的Python库,目标是快速支付GUI用户界面,尤其是多点触摸应用程序。

Kivy和python一样具有可以的跨平台特性,使用Kivy编写的主次可以在Windows,Linux,和mac
OSX系统之间无缝切换运行,而且所有当地展现效果,越发对触摸屏应用的援救较好,在非触摸屏上也可以匹配鼠标模拟触摸功效。Kivy甚至足以运作在android和IOS设备上,具有极强的跨平台能力。

该项目介绍在Ubuntu环境下搭建Kivy的支付环境,编写GUI程序落成与服务器通信的例证。

Kivy是一套专门用来跨平台飞快利用开发的开源框架,使用Python和Cython编写,对于多点触控有着不行良好的支撑,不仅能让开发者飞快到位简洁的相互原型设计,还协理代码重用和陈设,相对是一款颇令人惊艳的NUI框架。

论及知识点

  • Kivy开发条件的搭建
  • 利用Kivy开发跨平台GUI程序,学会运用Kivy中的不难控件
  • 对GUI事件的响应操作
  • 选拔kivy语言布局界面
  • 复习Python的socket通讯

做了很久的iOS开发,一致想涉猎一些Android开发经历。然后,上学那会就可怜争论写java代码,因此不断想找个跨平台框架。kivy是本人方今关注相比多的python框架。上面我概括介绍一下kivy的使用格局。

效果图

image.png

图片 1

开发准备

打开Xfce终端(指实验楼在线支付条件里的终端),下载并安装
Kivy的连带信赖 。

$ sudo apt-get install python-setuptools python-pygame python-opengl \
  python-gst0.10 python-enchant gstreamer0.10-plugins-good python-dev \
  build-essential libgl1-mesa-dev-lts-quantal libgles2-mesa-dev-lts-quantal\
  python-pip

碰到是或不是安装的驾驭时,输入y,按回车键继续设置。安装时间较长,并且视互联网状态而定。

安装Python扩展包Kivy。

$ sudo pip install Cython
$ sudo pip install kivy

该增添包安装时间较长,请耐心等待。

次第目录

实验步骤

(1)创建main.py

测试Kivy安装是或不是正常

设置完Kivy增加包之后,必须认同该扩张包是还是不是安装正常。常用的艺术就是在python环境下导入该包举办测试。上面以ipython环境展开测试,导入kivy后一切正常,将见到如下输出:

图片 2

此间输入图片的描述

from kivy.app import App

class HelloApp(App):
    pass

if __name__ == ‘__main__’:
    HelloApp().run()

使用Label控件

Label控件是GUI控件中最简单易行的一种了,紧要的效益就是用来音讯显示。我们在shell环境下输入下列代码,即可调用一个label控件并展示出来。

import kivy

from kivy.app import App 
from kivy.uix.button import Label 

class MyApp(App):
    """docstring for MyApp"""
    def build(self):
        return Label(text='Hello World')

if __name__ == '__main__':
    MyApp().run()

地点那段代码突显的结果如下图所示:

图片 3

那里输入图片的叙述

大家来分析一下地点的代码。前两行是从Kivy中导入APP类和Lable类,以便我们在后头使用。大家的主次新建了一个类,这几个类继承了APP类,并且定义了build方法,在build方法中,再次回到一个Lable实例,在Lable上呈现字符串“Hello
World”

俺们看来整个屏幕都是以此大Lable并且以褐色为背景。那是因为默认的窗口大小里唯有Lable一个控件,所以它铺满了窗口。再细致察看发现窗口的名字是“My”,那就是我们定义的类的名字去掉“APP”,这种概念方式也是Kivy强制须要的,那是为着便利kivy语言查找到用户定义的类,大家将在其后介绍那上头知识。启动大家的GUI程序,只要求调用大家定义的类中的run方法,分明这几个方法继承于父类APP。

(2)hello.kv

使用Button控件

接下去大家举行一下Button控件的行使。Button控件比较Lable控件,除了外观以外,还有逻辑部分要处理。我们先把逻辑部分放一边,只看显示的有些。在shell窗口中输入程序:

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

代码运行的效应如下图:

图片 4

此地输入图片的叙说

看起来和Label没有怎么分化,可是当大家用鼠标点击窗口内部时,按钮被按下,并变为灰色:

图片 5

此间输入图片的叙述

出于我们尚无拉长其余逻辑,所以点击按钮后也未尝其他动作被实践。

在意kv文件的文本名因为HelloApp去除app,而要小写

为button控件添加响应

上面我们来为Button添加callback函数来响应Button被按下时的动作。作为示范,大家在按钮按下时打印一行语句来显示按钮被按下了。

from kivy.app import App
from kivy.uix.button import Button

def callback(instance):
    print('The button <%s> is being pressed' % instance.text)

bt1=Button(text='Hello World')
bt1.bind(on_press=callback)
class TestApp(App):
    def build(self):
        return bt1

TestApp().run()

先是我们定义个一个callback函数,传入参数为一个控件实例,在函数体内部,打印那个空间的text属性。接下来,实例化一个按钮控件,与地点分歧的是,这一次的控件增添了一个绑定按下后的回调函数。在大家的类中的build方法中,直接回到我们实例化的bt1即可。该段代码的运作效果如下,图中点击了很多次按钮:

图片 6

此间输入图片的叙说

Label:
    text:’Hello,Kivy’

kv语言介绍

kivy库拥有自己的布局语言,名字就叫“kv语言”。那是一种恍若于标记语言的布局语言,方便开发者将GUI界面和逻辑分离。那么kivy是怎么将python脚本和kv布局联系到共同的吧?还记得大家最开始定义类的时候,用一种专门的命名格局么?类的名字最终必须是APP结尾,比如我们的是“MyAPP”。那么我们在编制界面布局的时候,相应的kv文件必须命名为My.kv,不能够随便乱起名字,只好用那个,其余名字不认。

kv语言也如约python的对齐原则,顶层控件顶在最左,子控件在其下方空多少个空格键,子控件的习性持续空七个空格。每个子控件都有自己无比的id,方便在先后中访问其质量,例如下边这么些漫威漫画一级英雄的布局:

<Marvel>
    Label:
        id: loki
        text: 'loki: I AM YOUR GOD!'
    Button:
        id: hulk
        text: "press to smash loki"
        on_release: root.hulk_smash()

对应的python是:

class Marvel(BoxLayout):
    def hulk_smash(self):
        self.ids.hulk.text = "hulk: puny god!"
        self.ids["loki"].text = "loki: >_<!!!" # alternative syntax

那段代码其实是复仇者联盟中的一个部分,洛基跟地球人说:我是你们的神!然后绿巨人出现,一巴掌把洛基扇到了一头,然后一脸不屑地说了一句:弱爆了的神!洛基的神采:>_<!!!

代码很粗略,我们可以友善实施一下探访效果。关于kv语言更加多的牵线及用法,可参照kivy的合法文档

该段代码不可以一直运行,完整的代码如下:

#-*- coding:utf-8 -*-

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scatter import Scatter
from kivy.uix.carousel import Carousel
from kivy.uix.button import Button
from kivy.uix.modalview import ModalView
from kivy.uix.scrollview import ScrollView

class Marvel(BoxLayout):
    def hulk_smash(self):
        self.ids.hulk.text = "hulk: puny god!"
        self.ids["loki"].text = "loki: >_<!!!" # alternative syntax

class testMarvelApp(App):
    def build(self):
        return Marvel()

if __name__ == '__main__':
    testMarvelApp().run()

还有别忘了大家的布局文件,注意因为python文件中的类名是testMarvelApp,所以kv文件的名字只好是testMarvel.kv:

<Marvel>
    Label:
        id: loki
        text: 'loki: I AM YOUR GOD!'
    Button:
        id: hulk
        text: "press to smash loki"
        on_release: root.hulk_smash()

那段程序的实施效果如下:

图片 7

此间输入图片的叙说

点击按钮后,效果为:

图片 8

此间输入图片的描述

kv时kivy的界面描述文件,其中定义了label,label的情节为‘Hello.kivy’

socket通讯GUI

为了和服务器通信,大家须求有个发送框,一个接收框和一个发送按钮。使用kv语言布局的次序如下:

#:kivy 1.8.0

myCarousel:

<myCarousel>:
    loop:True
    id:my_Carousel
    text_input5:text_input5
    text_input6:text_input6
    text_input7:text_input7
    connect:connect
    canvas:
        Rectangle:
            size: self.size
            source:'022.jpg'

    BoxLayout:
        orientation: "vertical"
        BoxLayout: 
            height: "40dp" #
            size_hint_y: None
            Label:
                text: 'ip:'
                size_hint_x: 25 #
            TextInput:
                id: text_input5
                size_hint_x: 50
                text:'192.168.1.21'
                focus: True
                multiline: False
            Button:
                id:connect
                text: "Connect"
                size_hint_x: 25
                on_press: app.connect_server()

        BoxLayout:
            Label:
                size_hint_x: 5
            TextInput:
                id: text_input7
                size_hint_x: 90
                focus: True
                multiline: True
            Label:    
                size_hint_x: 5

        BoxLayout: 
            height: "40dp" #
            size_hint_y: None
            Label:
                text: 'message:'
                size_hint_x: 25 #
            TextInput:
                id: text_input6
                size_hint_x: 50
                focus: True
                multiline: False
            Button:
                text: "Send"
                size_hint_x: 25
                on_press: app.send()


<CTextInput@TextInput>
    on_focus:
        screen = self.parent.parent.parent.parent
        if screen.parent: screen.focused = self

那段kv语言生成的界面在windows下看起来是其一样子的:

图片 9

此处输入图片的讲述

仔细看代码的同学肯定发现了这几个布局是有个背景图片的,不过被信息框挡住了看不见。没关系,kivy框架的一个专门吸引人的地点就是它完周全向触屏设备,即便在没有触摸屏的windows电脑上,也足以用鼠标模拟手指的触动操作。我们在界面边缘单击鼠标按住,向左拖动,就会意识在那界面之后,美观的女孩子暗藏:

图片 10

此地输入图片的叙说

该背景图片请从控制台下载:

$ wget http://labfile.oss.aliyuncs.com/courses/755/022.jpg

地点详细的牵线了采纳kivy开发socket通信程序的严重性代码以及功效完成,关于客户端、服务端以及测试评释等,那里就不再叙述了,点击【使用kivy开发socket通信程序】即可查看完整的支出文档了~

客户端程序

对应上述界面文件的python代码,程序的成效是当界面上的连接按钮按下后,连接服务器。连接成功后,将发送框内的公文发送给服务器。

劳动器端程序

为了求证程序的效应,需求编制一个格外不难的劳动器端程序。

尝试验证

也就是围绕测试了socket通信。

以上内容总体截选自实验楼项目教程【使用kivy开发socket通讯程序】,感兴趣的同伙可以点击链接查看所有文档~

(3)运行程序

kivy main.py

先后截图

图片 11

相关文章