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

1,537 阅读3分钟

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 pypi.tuna.tsinghua.edu.cn/simple  some-package

安装kivy官方示例

验证kivy安装成功:


from kivy.uix.button import Button


class TestApp(App):

def build(self):

return Button(text='iPaoMi')


TestApp().run()

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

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

image.png 在这里强烈建议大家去下载一个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上运行需要打包,参考地址:

kivy.org/doc/stable/…

三、定制应用程序

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

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

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()
 
 

image.png

点击运行

image.png