Python3 Kivy Ui库

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

1.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 了。

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

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

2.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上运行需要打包,参考地址:

Create a package for Android — Kivy 2.0.0 documentation

3.定制应用程序

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

我们使用网格布局以两列来管理(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()


点击运行

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不努力谁会可怜你?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值