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 代码。

首先,引入所需的模块:

1

2

3

4

5

6

7

from kivy.app import App

from kivy.uix.screenmanager import Screen,SlideTransition

from kivy.core.text import LabelBase

from kivy.uix.button import ButtonBehavior

from kivy.uix.image import Image

from kivy.clock import Clock

import time

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

1

2

3

4

LabelBase.register(

name='SiyuanHeiti',

fn_regular='./font/SourceHanSansCN-Normal.ttf'

)

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

1

2

3

4

5

6

7

8

9

10

11

# 图像按钮

class ImageButton(ButtonBehavior,Image):

pass

# 秒表屏幕

class StopwatchScreen(Screen):

pass

# 时钟屏幕

class ClockScreen(Screen):

pass

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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

class MainApp(App):

sw_started = False # 秒表启动状态

sw_seconds = 0 # 当前秒表秒数

def update(self,n):

# 如果秒表已启动,更新当前秒数

if self.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)))

# 重写程序启动的事件

def on_start(self):

Clock.schedule_interval(self.update,0)

# 开始/停止

def start_stop(self):

self.root.ids['stopwatch_screen'].ids['start_stop'].text = '启动' if self.sw_started else '停止'

self.sw_started = not self.sw_started

# 重置秒表

def reset(self):

if self.sw_started:

self.root.ids['stopwatch_screen'].ids['start_stop'].text = '启动'

self.sw_started = False

self.sw_seconds = 0

def go_forward(self):

screen_manager = self.root.ids['screen_manager']

screen_manager.transition = SlideTransition(direction="right")

screen_manager.current = "stopwatch_screen"

def go_back(self):

screen_manager = self.root.ids['screen_manager']

screen_manager.transition = SlideTransition(direction="left")

screen_manager.current = "clock_screen"

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

1

2

3

if __name__ == '__main__':

app = MainApp()

app.run()

小结

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

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

python开发桌面时钟_python基于Kivy写一个图形桌面时钟程序相关推荐

  1. python kivy显示图片_python基于Kivy写一个图形桌面时钟程序代码示例

    本篇文章小编给大家分享一下python基于Kivy写一个图形桌面时钟程序代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Kivy 是一个开源的 ...

  2. python时钟程序的设计总结_python基于Kivy写一个图形桌面时钟程序

    kivy 是一个开源的 python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 kivy 编写的程序可在 linux,windows,os x,android,ios 和 ra ...

  3. python鼠标绘图_python 基于opencv 实现一个鼠标绘图小程序

    需求 在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换.左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图. 实现思想 用鼠标画图:需要定义鼠标的回调函数mouse_event 画圆 ...

  4. python文件分发_python 写一个文件分发小程序

    一.概述 该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 二.参数文件说明 1. settings.txt的说明 a. 通过配置settings.txt,填源 ...

  5. 用python编写一个点餐程序_Python写一个自动点餐程序

    原博文 2019-08-09 10:45 − # Python写一个自动点餐程序 ## 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘 ...

  6. 【vite+vue3.0】基于vite写一个将md文件渲染为js文件的插件

    基于vite写一个将md文件渲染为js文件的插件 前言 尤大是这么描述 Vite 的: 「一个基于浏览器原生 ES imports 的开发服务器. 利用浏览器去解析 imports,在服务器端按需编译 ...

  7. DuiVision开发教程(2)-如何写一个简单的界面程序

    基于DuiVision界面库开发的界面程序主要包括如下几部分内容: 1.资源定义,包括图片资源.各个窗口界面的xml定义文件 2.事件处理类代码,用于处理界面响应消息 3.其他业务逻辑代码 下面举例说 ...

  8. 基于C#制作一个ChatGPT桌面助手

    基于C#制作一个ChatGPT桌面助手,在工作或者学习时提升自己的效率,工欲善其事,必先利其器. 一.前言 1.1.什么是ChatGPT 1.2.ChatGPT官网及key申请 二.后台项目 2.1. ...

  9. 用C#写一个秒表和时钟

    利用C#及visual studio 2019的可视化编程写一个秒表和时钟的窗体程序. 在秒表中,需要引用一个Diagnostics的类库实现计时功能:using System.Diagnostics ...

最新文章

  1. 经典分类:线性判别分析模型!
  2. JVM NativeMemoryTracking 分析堆外内存泄露
  3. Longest Substring Without Repeating Characters
  4. SpringBoot整合RabbitMQ 实现五种消息模型
  5. 如何在 Eclipse 中使用命令行
  6. 云计算三种服务模式SaaS、PaaS和IaaS及其之间关系(顺带CaaS、MaaS)
  7. 3 分钟了解 JSON Schema
  8. IDEIDEA 如何搭建maven 安装、下载、配置A 如何搭建maven 安装、下载、配置
  9. MySQL—Install/Remove of the Service Denied
  10. Unity实现多语言切换
  11. chrome浏览器的跨域问题解决
  12. 【寒江雪】Go实现工厂模式
  13. 是非人生 — 一个菜鸟程序员的5年职场路 第30节
  14. 用友U8V系统怎么重启服务器,用友u8怎么重启云服务器
  15. win10 企业版 设备管理器找不到 端口(COM和LPT)
  16. 什么软件测试充电器快不快,手机充电的快慢到底取决于什么?充电头还是数据线?看完就知道了...
  17. 计算机视觉作业(一)Image Filtering and Hybrid Images
  18. 阿里云轻量服务器怎么设置密码?
  19. malloc挖掘---动态存储器分配深入了解
  20. Android debug.keystore的密码

热门文章

  1. java毕业设计大学生学科竞赛管理系统mybatis+源码+调试部署+系统+数据库+lw
  2. 应用层常见协议——知识点
  3. C#屏幕录像控件代码
  4. chrome插件离线包(未上架插件解压文件)安装步骤
  5. VuforiaAR_教程
  6. docker限制容器内存
  7. ajaxForm和ajaxSubmit
  8. JTextField的部分常用使用方法
  9. Android系统截屏功能提取
  10. Nature子刊:用于阿尔茨海默病痴呆评估的多模态深度学习模型