Python编程(Kivy 安装及使用入门)


Kivy是一个很优秀的,基于Python的GUI库,可以利用Python快速编程的特点,快速的编写windows, linux, mac, android, ios等主流平台的应用程序。同wxPython、PyQt相比,最大的优点是可以快速地编写移动应用程序。

 

一、Kivy 安装

在 windows 命令行中,执行以下命令

python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew

python -m pip install kivy.deps.gstreamer

python -m pip install kivy

以上如果安装过慢,可以使用清华镜像:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  some-package

安装kivy官方示例

python -m pip install kivy_examples

验证kivy安装成功:

from kivy.app import App

from kivy.uix.button import Button


class TestApp(App):

def build(self):

return Button(text='iPaoMi')


TestApp().run()

你将看到执行上面的 Python 代码,会运行如下的窗口,这可以算是 kivy 版的 hello world 了。

Python编程(Kivy 安装及使用入门)_第1张图片

如果测试的时候报错时,可以用idea这个开发工具,简单、快速

Python编程(Kivy 安装及使用入门)_第2张图片

在这里强烈建议大家去下载一个idea当开发工具,虽然需要花时间学怎样导包等等之类的问题,但是学会了基本操作就会避免菜很多不必要的吭坑阬。。。

 

二、Kivy 简单使用:

创建一个kivy应用程序步骤:

  • 继承App类
  • 实现它的build()方法,它能返回一个部件的实例(你的部件树的根部件)
  • 实例化该类,同时调用它的run()方法

下面是一个最小化应用程序的例子:


import kivy
kivy.require('1.0.6') # 用你当前的kivy版本替换
 
from kivy.app import App
from kivy.uix.label import Label
 
class MyApp(App):
    def build(self):
        return Label(text='Hello world')
 
if __name__ == '__main__':
    MyApp().run()

你的应用程序的基类需要继承APP类,它在kivy_installation_dir/kivy/app.py中。

提示:如果你想进一步的研究APP类,你可以打开该文件进行深入的探讨。我们鼓励你重读它的代码。Kivy是基于Python实现的并且其文档都在实际的文件里。from kivy.app import App。

将简单程序写好后可以在各个平台运行,其中在Android上运行需要打包,参考地址:

https://kivy.org/doc/stable/guide/packaging-android.html

 

三、定制应用程序

下面让我们扩展一下,做一个简单的用户名/密码的输入页面。

我们使用网格布局以两列来管理(app)的孩子们,并且每行添加了一个标签和一个文本输入框。
运行程序如图:

# -*- encoding: utf-8 -*-
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
kivy.require("1.11.1")

fonts = "./SourceHanSerifSC-Regular.otf"

# 页面一
class ConnectPage(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.cols = 3
        self.add_widget(Label(text="号码:",font_name=fonts))
        self.ip = TextInput(multiline=False,font_name=fonts)
        self.add_widget(self.ip)
        self.add_widget(Label(text="说明:",font_name=fonts))

        self.add_widget(Label(text="号段:",font_name=fonts))
        self.port = TextInput(multiline=False,font_name=fonts)
        self.add_widget(self.port)
        self.add_widget(Label(text="说明:",font_name=fonts))

        self.add_widget(Label(text="Sheet个数:",font_name=fonts))
        self.name = TextInput(multiline=False,font_name=fonts)
        self.add_widget(self.name)
        self.add_widget(Label(text="说明:",font_name=fonts))

        self.join = Button(text="运行",font_name=fonts)
        self.join.bind(on_press=self.join_button) # 点击它就会弹出另一个页面
        self.add_widget(Label())
        self.add_widget(Label())
        self.add_widget(self.join)


    def join_button(self, instance):
        port = self.port.text
        ip = self.ip.text
        name = self.name.text
        info = f"{port} {ip} {name}"
        chat_app.info_page.update_info(info)# 调用页面二的方法 赋值显示
        chat_app.screen_manager.current ="Info" # 加载页面渲染信息


# 页面二
class InfoPage(GridLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.cols = 1
        self.message = Label(halign="center", valign="middle", font_size=30,font_name=fonts)
        self.message.bind(width=self.update_text_width)
        self.add_widget(self.message)
    def update_info(self,message):
        self.message.text = message
    def update_text_width(self,*_):
        self.message.text_size = (self.message.width*0.9,None)

# 程序对象
class EpicApp(App):
    def build(self):
        self.screen_manager = ScreenManager() # 渲染的页面==>屏幕==>屏幕管理器

        self.connect_page = ConnectPage()   # 页面一
        screen = Screen(name="Connect")
        screen.add_widget(self.connect_page)
        self.screen_manager.add_widget(screen)

        self.info_page = InfoPage()  # 页面二
        screen = Screen(name="Info")
        screen.add_widget(self.info_page)
        self.screen_manager.add_widget(screen)

        return self.screen_manager


if __name__ == '__main__':
   chat_app = EpicApp()
   chat_app.run()


Python编程(Kivy 安装及使用入门)_第3张图片

点击运行

Python编程(Kivy 安装及使用入门)_第4张图片

 

 

 

 

 

 

你可能感兴趣的:(Python编程(Kivy 安装及使用入门))