当前位置:   article > 正文

Python3 Kivy Ui库

kivy

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

1.Kivy 安装

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

  1. python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
  2. python -m pip install kivy.deps.gstreamer
  3. 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安装成功:

  1. from kivy.app import App
  2. from kivy.uix.button import Button
  3. class TestApp(App):
  4. def build(self):
  5. return Button(text='iPaoMi')
  6. TestApp().run()

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

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

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

2.Kivy 简单使用

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

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

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

  1. import kivy
  2. kivy.require('1.0.6') # 用你当前的kivy版本替换
  3. from kivy.app import App
  4. from kivy.uix.label import Label
  5. class MyApp(App):
  6. def build(self):
  7. return Label(text='Hello world')
  8. if __name__ == '__main__':
  9. 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)的孩子们,并且每行添加了一个标签和一个文本输入框。
运行程序如图:

  1. # -*- encoding: utf-8 -*-
  2. import kivy
  3. from kivy.app import App
  4. from kivy.uix.label import Label
  5. from kivy.uix.gridlayout import GridLayout
  6. from kivy.uix.textinput import TextInput
  7. from kivy.uix.button import Button
  8. from kivy.uix.screenmanager import ScreenManager, Screen
  9. kivy.require("1.11.1")
  10. fonts = "./SourceHanSerifSC-Regular.otf"
  11. # 页面一
  12. class ConnectPage(GridLayout):
  13. def __init__(self, **kwargs):
  14. super().__init__(**kwargs)
  15. self.cols = 3
  16. self.add_widget(Label(text="号码:",font_name=fonts))
  17. self.ip = TextInput(multiline=False,font_name=fonts)
  18. self.add_widget(self.ip)
  19. self.add_widget(Label(text="说明:",font_name=fonts))
  20. self.add_widget(Label(text="号段:",font_name=fonts))
  21. self.port = TextInput(multiline=False,font_name=fonts)
  22. self.add_widget(self.port)
  23. self.add_widget(Label(text="说明:",font_name=fonts))
  24. self.add_widget(Label(text="Sheet个数:",font_name=fonts))
  25. self.name = TextInput(multiline=False,font_name=fonts)
  26. self.add_widget(self.name)
  27. self.add_widget(Label(text="说明:",font_name=fonts))
  28. self.join = Button(text="运行",font_name=fonts)
  29. self.join.bind(on_press=self.join_button) # 点击它就会弹出另一个页面
  30. self.add_widget(Label())
  31. self.add_widget(Label())
  32. self.add_widget(self.join)
  33. def join_button(self, instance):
  34. port = self.port.text
  35. ip = self.ip.text
  36. name = self.name.text
  37. info = f"{port} {ip} {name}"
  38. chat_app.info_page.update_info(info)# 调用页面二的方法 赋值显示
  39. chat_app.screen_manager.current ="Info" # 加载页面渲染信息
  40. # 页面二
  41. class InfoPage(GridLayout):
  42. def __init__(self,**kwargs):
  43. super().__init__(**kwargs)
  44. self.cols = 1
  45. self.message = Label(halign="center", valign="middle", font_size=30,font_name=fonts)
  46. self.message.bind(width=self.update_text_width)
  47. self.add_widget(self.message)
  48. def update_info(self,message):
  49. self.message.text = message
  50. def update_text_width(self,*_):
  51. self.message.text_size = (self.message.width*0.9,None)
  52. # 程序对象
  53. class EpicApp(App):
  54. def build(self):
  55. self.screen_manager = ScreenManager() # 渲染的页面==>屏幕==>屏幕管理器
  56. self.connect_page = ConnectPage() # 页面一
  57. screen = Screen(name="Connect")
  58. screen.add_widget(self.connect_page)
  59. self.screen_manager.add_widget(screen)
  60. self.info_page = InfoPage() # 页面二
  61. screen = Screen(name="Info")
  62. screen.add_widget(self.info_page)
  63. self.screen_manager.add_widget(screen)
  64. return self.screen_manager
  65. if __name__ == '__main__':
  66. chat_app = EpicApp()
  67. chat_app.run()

点击运行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/471519
推荐阅读
相关标签
  

闽ICP备14008679号