python桌面应用开发kivy_Kivy 图形界面开发初体验
本文是觅道文档连载教程《使用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 图形界面开发初体验相关推荐
- python kivy显示图片_Kivy 图形界面开发初体验
本文是觅道文档连载教程<使用Kivy构建现代桌面GUI应用> 的第一个实例,如需细致的介绍,可点击此处进行阅读 Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序. ...
- 这绝对是个高手,一个用 C 开发的图形界面开发库
大家好,我是章鱼猫. 今天给大家推荐一个开源项目,这个开源项目绝对是一个高手开发并开源的项目. 这个开源项目是一个用 C 语言编写的桌面端图形界面开发库:LCUI . 这个图形界面开发库 LCUI 可 ...
- 一个用 C 开发的图形界面开发库
[公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫. 今天给大家推荐一个开源项目,这个开源项目绝对是一个高手开发并开源的项目. 这个开源项目是一个用 C ...
- python界面开发工具-python图形界面开发用什么
作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教 ...
- python界面开发工具哪个好_python图形界面开发用什么
作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够 ...
- python图形界面开发用什么
作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够 ...
- python简单编程例子-中文方便就用中文编程!Python图形界面开发实例
原标题:中文方便就用中文编程!Python图形界面开发实例 之前做的一个Python小程序,功能很简单,面对用户群也很窄,是五笔编码编.校人员使用的五笔编码编辑器. 这样的"周末" ...
- 不是python中用于开发用户界面的第三方库-python界面 | Tkinter图形界面开发库
0 写在前面 未经允许,不得转载,谢谢~~ 毕设要在现有的基础上做一个可视化的界面,所以趁机也学习一波如何用python实现图形界面的开发. 本文主要学习并整理了: 简要介绍用于python图形界面开 ...
- Python图形界面开发(一)——pyside入门
目录 前言 如果用 Python 语言开发 跨平台 的图形界面的程序,主要有3种选择: PySide2.PyQt5 都是基于著名的 Qt 库. 安装 PySide2 安装PyQt5 案例一 前言 众所 ...
最新文章
- jdbc mysql 实例名_JDBC连接自定义sqlserver数据库实例名(多个实例)
- springboot模板引擎_Spring Boot实战:如何搞定前端模板引擎?
- 皮一皮:这算画蛇添足?
- Android开发者必备的42个链接
- 课程及其编码字典python_【课程15】Python字典
- ubuntu安装mysql远程_Ubuntu18.04下远程安装MySQL
- pom.xml报错:Failure to find org.apache.maven.doxia:doxia-logging-api:jar:1.1 in http://repo.
- php joomla,基于MySQL / PHP和Joomla的因特网管理信息系统设计
- 让人想骂街的 Python 炫技操作:条件语句的七种写法
- pythonlinux版本_Linux_Python版本控制
- visio安装问题总结
- 测试——web案例思维导图
- 钽电容正负极_钽电容是什么?怎么区分正负极?
- win7 计算机登录用户密码,Win7电脑无需知道密码绕过密码登录的操作方法?
- 非接触物体尺寸形态测量(G题)
- 实验5-11 空心的数字金字塔
- C/C++ Linux 后台服务器开发高级架构师学习知识路线总结
- VMware: 虚拟机启动没有IP地址
- 重磅!李沐「动手学深度学习」中文课程笔记来了!
- kotlin的入口函数
热门文章
- Linux 加密解密技术基础及OpenSSL介绍
- iPhone手机变卡怎么办?五个解决方法你需要知道
- Windows开机后不显示桌面解决办法
- 用计算机解决问题 评课稿,解决问题评课稿
- 原创 【ReactJs+springBoot项目——租房】第13章:MySQL主从复制+MyCat数据库中间件+HAProxy+PXC集群
- TCP/IP四层模型简述
- 【调剂】杭州电子科技大学圣光机计算科学与智能控制研究中心2022年考研预调剂信息公告...
- 锐捷无线CAPWAP隧道技术原理
- spring boot之FreeMarker
- 隐藏滚动条但是保留滚动效果