本文是觅道文档连载教程《使用Kivy构建现代桌面GUI应用》 的第一个实例,如需细致的介绍,可在文末点击“阅读原文”进行阅读

Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序。

它有如下三个特点:

•跨平台 Kivy 。编写的程序可在 Linux,Windows,OS X,Android,iOS 和 Raspberry Pi 上运行。•商业友好 。Kivy 基于 MIT 许可证进行开源,可以进行免费的商业使用。•GPU 加速 。Kivy 的图像引擎基于 Open ES 2 构建,性能出众。

除此之外 Kivy 也存在一些缺点,比如:

•非原生的图形界面;•打包后的体积很大;•缺乏社区支持;•缺乏足够的示例文档;•对中文的支持很差;

尽管 Kivy 有这样的缺点,但也不失为一个优秀的 Python 图形界面开发库。尤其是其能够将应用程序打包为移动设备(IOS 和安卓)可用的 APP,可以说极大地扩展了 Python 开发的边界。

本篇文章,我们用 Kivy 写一个桌面时钟程序,来体验一下 Kivy 的图形界面开发。其最终效果如下图所示:

本文所述程序的代码结构如下图所示:

其中:

•/font文件夹用于放置中文字体文件。在其中,我们放置了思源黑体作为图形的中文显示字体。•/imgs文件夹用于放置静态图片文件,在其中,我们放置了两个方向指示图片。•/kv文件夹用于存放 Kivy 界面的设计模板。•main.kv是主程序的界面设计模板。•main.py是主程序的 Python 代码。

使用 kv 构建界面

Kivy 提供了一种简单且可扩展的 GUI 设计语言用来专门设计对 Kivy 的图形界面进行设计。我们可以在.kv文件中设计好程序的图形界面,然后在.py文件中对图像界面进行交互控制。

在本程序中,我们一共有 3 个地方使用了 Kivy 的设计语言,它们分别是:

•时钟屏幕:clockscreen.kv•秒表屏幕:stopwatchscreen.kv•主界面:main.kv

在时钟屏幕中,我们按照如下方式定义构建了一个界面:

在秒表屏幕中,我们按照如下方式定义构建了一个界面:

最后在主界面中,引入这两个屏幕,通过布局管理器,将其放置在了主界面中:

编写主程序代码

在通过 Kivy 的kv设计语言构建好了程序界面之后,我们来编写主程序的 Python 代码。

首先,引入所需的模块:

fromkivy.appimportAppfromkivy.uix.screenmanagerimportScreen,SlideTransitionfromkivy.core.textimportLabelBasefromkivy.uix.buttonimportButtonBehaviorfromkivy.uix.imageimportImagefromkivy.clockimportClockimporttime

接着,配置一下中文字体。因为 Kivy 的先天缺陷,其对中文的支持很差劲,默认情况下,中文都会显示成一个个豆腐块,只能通过引入中文字体来解决:

LabelBase.register(name='SiyuanHeiti',fn_regular='./font/SourceHanSansCN-Normal.ttf')

然后,我们创建 3 个在kv文件中定义的小部件:

# 图像按钮classImageButton(ButtonBehavior,Image):pass# 秒表屏幕classStopwatchScreen(Screen):pass# 时钟屏幕classClockScreen(Screen):pass

最后,创建一个名为MainApp()的类,这是程序的主类。我们把各种交互控制的方法写在这里面:

classMainApp(App):sw_started=False# 秒表启动状态sw_seconds=0# 当前秒表秒数defupdate(self,n):# 如果秒表已启动,更新当前秒数ifself.sw_started:self.sw_seconds+=n# 更新当前时间self.root.ids['clock_screen'].ids['time'].text=time.strftime("[b]%H[/b]:%M:%S")# 更新秒表m,s=divmod(self.sw_seconds,60)# 返回一个包含商和余数的元组self.root.ids['stopwatch_screen'].ids['stopwatch'].text=("%02d: %02d.[size=40]%02d[/size]"%(int(m),int(s),int(s*100%100)))# 重写程序启动的事件defon_start(self):Clock.schedule_interval(self.update,0)# 开始/停止defstart_stop(self):self.root.ids['stopwatch_screen'].ids['start_stop'].text='启动'ifself.sw_startedelse'停止'self.sw_started=notself.sw_started# 重置秒表defreset(self):ifself.sw_started:self.root.ids['stopwatch_screen'].ids['start_stop'].text='启动'self.sw_started=Falseself.sw_seconds=0defgo_forward(self):screen_manager=self.root.ids['screen_manager']screen_manager.transition=SlideTransition(direction="right")screen_manager.current="stopwatch_screen"defgo_back(self):screen_manager=self.root.ids['screen_manager']screen_manager.transition=SlideTransition(direction="left")screen_manager.current="clock_screen"

这样,这个程序就完成了。我们实例化MainApp()并调用其run()方法即可运行。

if__name__=='__main__':app=MainApp()app.run()

小结

总体而言,使用 Kivy 编写图形界面程序和使用其他 Python 图像界面库相比,没有多大的区别。其通过kv设计语言,很大程序上把图形程序的界面和交互分离开来,使得程序的开发比较清晰。

如果需要使用 Kivy 开发出精美且功能强大的图形界面,还是得深入熟悉和了解 Kivy 的各类组件。

python桌面应用开发kivy_Kivy 图形界面开发初体验相关推荐

  1. python kivy显示图片_Kivy 图形界面开发初体验

    本文是觅道文档连载教程<使用Kivy构建现代桌面GUI应用> 的第一个实例,如需细致的介绍,可点击此处进行阅读 Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序. ...

  2. 这绝对是个高手,一个用 C 开发的图形界面开发库

    大家好,我是章鱼猫. 今天给大家推荐一个开源项目,这个开源项目绝对是一个高手开发并开源的项目. 这个开源项目是一个用 C 语言编写的桌面端图形界面开发库:LCUI . 这个图形界面开发库 LCUI 可 ...

  3. 一个用 C 开发的图形界面开发库

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫. 今天给大家推荐一个开源项目,这个开源项目绝对是一个高手开发并开源的项目. 这个开源项目是一个用 C ...

  4. python界面开发工具-python图形界面开发用什么

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教 ...

  5. python界面开发工具哪个好_python图形界面开发用什么

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够 ...

  6. python图形界面开发用什么

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够 ...

  7. python简单编程例子-中文方便就用中文编程!Python图形界面开发实例

    原标题:中文方便就用中文编程!Python图形界面开发实例 之前做的一个Python小程序,功能很简单,面对用户群也很窄,是五笔编码编.校人员使用的五笔编码编辑器. 这样的"周末" ...

  8. 不是python中用于开发用户界面的第三方库-python界面 | Tkinter图形界面开发库

    0 写在前面 未经允许,不得转载,谢谢~~ 毕设要在现有的基础上做一个可视化的界面,所以趁机也学习一波如何用python实现图形界面的开发. 本文主要学习并整理了: 简要介绍用于python图形界面开 ...

  9. Python图形界面开发(一)——pyside入门

    目录 前言 如果用 Python 语言开发 跨平台 的图形界面的程序,主要有3种选择: PySide2.PyQt5 都是基于著名的 Qt 库. 安装 PySide2 安装PyQt5 案例一 前言 众所 ...

最新文章

  1. jdbc mysql 实例名_JDBC连接自定义sqlserver数据库实例名(多个实例)
  2. springboot模板引擎_Spring Boot实战:如何搞定前端模板引擎?
  3. 皮一皮:这算画蛇添足?
  4. Android开发者必备的42个链接
  5. 课程及其编码字典python_【课程15】Python字典
  6. ubuntu安装mysql远程_Ubuntu18.04下远程安装MySQL
  7. pom.xml报错:Failure to find org.apache.maven.doxia:doxia-logging-api:jar:1.1 in http://repo.
  8. php joomla,基于MySQL / PHP和Joomla的因特网管理信息系统设计
  9. 让人想骂街的 Python 炫技操作:条件语句的七种写法
  10. pythonlinux版本_Linux_Python版本控制
  11. visio安装问题总结
  12. 测试——web案例思维导图
  13. 钽电容正负极_钽电容是什么?怎么区分正负极?
  14. win7 计算机登录用户密码,Win7电脑无需知道密码绕过密码登录的操作方法?
  15. 非接触物体尺寸形态测量(G题)
  16. 实验5-11 空心的数字金字塔
  17. C/C++ Linux 后台服务器开发高级架构师学习知识路线总结
  18. VMware: 虚拟机启动没有IP地址
  19. 重磅!李沐「动手学深度学习」中文课程笔记来了!
  20. kotlin的入口函数

热门文章

  1. Linux 加密解密技术基础及OpenSSL介绍
  2. iPhone手机变卡怎么办?五个解决方法你需要知道
  3. Windows开机后不显示桌面解决办法
  4. 用计算机解决问题 评课稿,解决问题评课稿
  5. 原创 【ReactJs+springBoot项目——租房】第13章:MySQL主从复制+MyCat数据库中间件+HAProxy+PXC集群
  6. TCP/IP四层模型简述
  7. 【调剂】杭州电子科技大学圣光机计算科学与智能控制研究中心2022年考研预调剂信息公告...
  8. 锐捷无线CAPWAP隧道技术原理
  9. spring boot之FreeMarker
  10. 隐藏滚动条但是保留滚动效果