2021年5月9日

Kivy 是一个开源的开发App的跨平台的 Python 的GUI库(系列1)

Kivy 是一个开源的开发App的跨平台的 Python 的GUI库(系列1)

1 说明

1.1 Kivy 是一个开源的开发App的跨平台的 Python 的GUI库。

1.2 Kivy 可以免费使用(目前在麻省理工学院的许可下),并获得专业支持。

1.3 可以使用相同的代码库为 Linux,Windows,OS X,Android 和 iOS 开发 Kivy 应用程序。据说很强大,估计强大的原因就是超级跨平台。

1.4 本文为系列教程1:主要介绍kivy的安装,入门级介绍:窗口,helloworld,图片展示,介绍详细,注释清楚,适合收藏。

2 准备

2.1 官网

https://github.com/kivy/kivy
https://kivy.org/

2.2 安装

pip install kivy
#本机安装
sudo pip3.8 install kivy
Kivy 是一个开源的开发App的跨平台的 Python 的GUI库(系列1)

pic.jpeg

3 窗口

3.1 代码一:

#方法一:采用默认
from kivy.app import App

# 小惊喜:窗口标题名就是Firstwin
class FirstwinApp(App):  #相同下面
#class Firstwin(App):
    pass

if __name__ == "__main__":
    FirstwinApp().run()
    #Firstwin().run()  #相同上面

3.2 代码二:

#方法二:对窗口的大小,背景颜色,标题名和图标进行设置
from kivy.app import App

from kivy.core.window import Window
Window.size=(800,1000)#窗口大小
#背景颜色是白色,颜色设置采用opengl样式
#Window.clearcolor = (1, 1, 1, 1)
#背景颜色是黑色,默认是黑色的
#Window.clearcolor = (0, 0, 0, 0)
#Window.clearcolor = (1, 1, 0, 0)  #黄色
#Window.clearcolor = (1, 0, 0, 0)  #红色
#Window.clearcolor = (1, 0, 1, 0)  #紫色
Window.clearcolor = (0, 0, 1, 0)  #蓝色

class SecondwinApp(App):
        def build(self):
           #修改电脑的状态栏上面app图标,自定义,也可以默认
           #self.icon = '/home/xgj/Desktop/kivy/icon.png'
           #认为修改窗口的标题名
           self.title = 'Hello world'
           
if __name__ == "__main__":
    SecondwinApp().run()

4 Helloworld

4.1 代码一

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

class Thirdwin(App):
    def build(self):
        #默认
        return Label(text='Hello world')
 
if __name__ == '__main__':
    Thirdwin().run()

4.2 代码二

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

class Fourthwin(App):
    def build(self):
        #显示中文,中文字体,字体大小,字体颜色,提前下载好中文字体simsun.ttf
        label = Label(text='Hello World你好世界', font_name='simsun.ttf',
        font_size=32,color=(.8,.9,0,1),
        #字体大小
        size_hint=(.5, .5),
        #字体位置
        pos_hint={'center_x': .5, 'center_y': .5})

        return label

if __name__ == '__main__':
    app = Fourthwin()
    app.run()
    #Fourthwin().run()

4.3 图

Kivy 是一个开源的开发App的跨平台的 Python 的GUI库(系列1)

4.3 代码三

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder

#kv文件内置法,相当于一个MyWidget类
kv = Builder.load_string('''

<MyWidget>:
    Label:
        text: 'Hello World你好世界'
        font_size: 32
        color: .8,.9,0,1
        font_name:'simsun.ttf'
                #字体位置
        size_hint:(.5, .5)
        #在这里是错误的,我的bug,why?
        #pos_hint:{'center_x': .5, 'center_y': .5}
        #pos_hint:({'center_x': .5}, {'center_y': .5})
        #只能这样设置位置,左下角为0,0,默认窗口大小600,600
        pos:300,300
''')

#MyWidget作为一个类,在kv文件内
class MyWidget(Widget):
    pass

#主窗口类
class Fifthwin(App):
    def build(self):
        #返回MyWidget
        return MyWidget()

if __name__ == "__main__":
    Fifthwin().run()

4.4 代码四

#k-6.py
#控制层
from kivy.app import App
from kivy.uix.widget import Widget

#样式层:sixthwin.kv,注意是小写的six
#其实就,是将类文件写在外面的kv,分离出来,是代码看起来简单,类似css文件
#注意kv文件的文件名是小写
class MyWidget(Widget):
    pass

class SixthwinApp(App):
    def build(self):
        return MyWidget()

if __name__ == "__main__":
    SixthwinApp().run()

4.5 样式层分离出来:sixthwin.kv文件

<MyWidget>:
    Label:
        text: 'Hello World你好世界'
        font_size: 32
        color: .8,.9,0,1
        font_name:'simsun.ttf'
                #字体位置
        size_hint:(.5, .5)
        #在这里是错误的
        #pos_hint:{'center_x': .5, 'center_y': .5}
        #pos_hint:({'center_x': .5}, {'center_y': .5})
        #只能这样设置位置,左下角为0,0,默认窗口大小600,600
        pos:300,300

4.6 效果图

Kivy 是一个开源的开发App的跨平台的 Python 的GUI库(系列1)

4.7 代码五:内置kv文件的另外一种方法

#k-5.py
#控制层
from kivy.app import App
from kivy.lang import Builder

#样式层
kv='''
#调用该函数
FloatLayout:
    Label:
        text: 'Hello World你好世界'
        font_size: 32
        color: .8,.9,0,1
        font_name:'simsun.ttf'
                #字体位置
        size_hint:(.5, .5)
        #在这里是错误的
        #pos_hint:{'center_x': .5, 'center_y': .5}
        #pos_hint:({'center_x': .5}, {'center_y': .5})


        #只能这样设置位置,左下角为0,0,默认窗口大小600,600
        pos:300,300

'''

class SixthwinApp(App):
    def build(self):
        return Builder.load_string(kv)

if __name__ == "__main__":
    SixthwinApp().run()

5 图片展示

5.1 代码:

from kivy.app import App
from kivy.uix.image import Image

#默认窗口大小和图片大小
class Picwin(App):
    def build(self):
        #窗口标题名设置
        self.title = '图片pic展示'
        #与本代码在同一个文件夹下
        img = Image(source='pic.jpeg')
        return img
 
if __name__ == '__main__':
    Picwin().run()

5.2 效果图

Kivy 是一个开源的开发App的跨平台的 Python 的GUI库(系列1)

未完待续。