赞
踩
Kivy是一个很优秀的,基于Python的GUI库,可以利用Python快速编程的特点,快速的编写windows, linux, mac, android, ios等主流平台的应用程序。同wxPython、PyQt相比,最大的优点是可以快速地编写移动应用程序。
在 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当开发工具,虽然需要花时间学怎样导包等等之类的问题,但是学会了基本操作就会避免菜很多不必要的吭坑阬。。。
创建一个kivy应用程序步骤:
下面是一个最小化应用程序的例子:
-
- 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
下面让我们扩展一下,做一个简单的用户名/密码的输入页面。
我们使用网格布局以两列来管理它(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()
-
-
点击运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。