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

news/2024/11/16 14:59:42/

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 的图形界面开发。其最终效果如下图所示:

a92a9e96c917f7eac3c8efca57a3ac4c.gif

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

63504f5ba7b5b1a15a0cfa6804b1f017.png

其中:

/font文件夹用于放置中文字体文件。在其中,我们放置了思源黑体作为图形的中文显示字体。

/imgs文件夹用于放置静态图片文件,在其中,我们放置了两个方向指示图片。

/kv文件夹用于存放 kivy 界面的设计模板。

main.kv是主程序的界面设计模板。

main.py是主程序的 python 代码。

使用 kv 构建界面

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

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

时钟屏幕:clockscreen.kv

秒表屏幕:stopwatchscreen.kv

主界面:main.kv

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

2571e8f40db4f1a687c8ab1bc292cf34.png

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

e7a05254a1245404606d63b0de55d34c.png

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

7ba04215f789c01a93173012af9e1f82.png

编写主程序代码

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

首先,引入所需的模块:

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 的先天缺陷,其对中文的支持很差劲,默认情况下,中文都会显示成一个个豆腐块,只能通过引入中文字体来解决:

labelbase.register(

name='siyuanheiti',

fn_regular='./font/sourcehansanscn-normal.ttf'

)

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

# 图像按钮

class imagebutton(buttonbehavior,image):

pass

# 秒表屏幕

class stopwatchscreen(screen):

pass

# 时钟屏幕

class clockscreen(screen):

pass

创建一个名为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()方法即可运行。

if __name__ == '__main__':

app = mainapp()

app.run()

小结

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

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

以上就是python基于kivy 写一个图形桌面时钟程序的详细内容,更多关于python kivy 写一个桌面时钟程序的资料请关注萬仟网其它相关文章!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!


http://www.ppmy.cn/news/475221.html

相关文章

HP打印机已上传文档但是无法打印问题的修复

点击windows栏,输入服务,打开服务列表。找到print spooler,点击重新运行即可。 之前也是尝试了设备重启、设备删除后重新加载、HP客户端修复等都无效。这个方法直接成功!

打印机驱动装上了,却无法正常打印的问题解决方法

用的是hp 1020,网络打印服务器。 一直都是好使的,不知道是不是不常用的事,突然就不好使了。 删除打印机重装,删除端口,重装,各种方法都试过了,都是不好使,最可怕的是,放弃网络打印…

打印机连不上解决方案

查看本机地址:打开CMD输入:ipconfig 回车键查看打印机自身IP:设置---全部wifi/以太网设置----连接检查---打印报告---找到打印机IP通过IP是否在同一号段判断打印机和计算机是否在同一个局域网中。如果在同一号段,cmd ping一下打印…

打印机故障---看起来没有什么问题,就是无法打印

今天办公室的打印机不知道出了什么问题,看起来一切似乎都是正常的。但是,打印文章时的监控窗口开始显示正在后台打印,过一会儿,显示错误-打印。 重启,重装驱动也不行。后来,打印机的维护人员过来看&#xf…

重装机器后,发现HP打印机无法打印多份

现象: 重装机器XP后,发现打印机无法打印多份: 打印2份文档 就出来一份 让后出来一张报告 就不打了 首先驱动没问题 报告内容如下: Printer Collation Status Page Error: Unable to collate job at printer Reaso…

容大热敏打印机打印纸张出半截,测试页不出嗡嗡响

今天,去给客户安装后厨打印机,用的产品是容大品牌。 容大热敏打印机有自己独特的几个点: 1、测试工具跟芯烨、佳博、极速打印机等都不通用的,又没有自己的打印测试工具,所以需要安装驱动测试打印;尤其是网络…

打印机能打印测试页但是无法打印的解决办法

本文只鉴于网络打印机的相关故障 表现故障为:正确安装了打印机驱动之后可以打印测试页但是当打印其他文档的时候无法打印,在打印列表里显示“正在打印、状态错误”等。 解决方法:控制面板-打印机-找到该打印机-属性-添加端口(类型…

Android 平板通过USB口连接小票打印机

1.首先注册一个广播:用户三种操作会导致系统发广播,插或者拔USB设备,还有就是在USB授权框点击是或者否 private void initReceiver() {//授权对话框点击操作之后会发出系统广播receiver new BroadcastReceiver() {public void onReceive(Context contex…