【Kivy】基于Kivy实现倒计时(心流状态)

心流状态介绍

在这里插入图片描述

Kivy介绍

能够全平台开发App,支持windows,macos,linux,安卓等等
PS:本文的窗口 保持在最前功能,调用了KivyOnTop,只支持Windows,

Kivy安装

参考python编程(Kivy 安装及使用教程)

python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
python -m pip install kivy.deps.gstreamer
python -m pip install kivy
""" test.py
	from kivy.app import App
	from kivy.uix.button import Button
	class TestApp(App):
	    def build(self):
	        return Button(text='iPaoMi') 
	TestApp().run()
"""
python test.py
# 可选(窗口保持最前,仅支持windows)
pip install pywin32

心流代码效果

在桌面正上方出现一个简单的计时器,点击就会倒计时,再次点击就会重置。
在这里插入图片描述

心流代码

# test.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from time import time
from kivy.core.window import Window
from kivy.properties import StringProperty
from functools import partial
from kivy.lang import Builder
from kivy.config import Config
from kivy.core.window import Window
Config.set('graphics', 'resizable', 0)
from kivy.uix.screenmanager import ScreenManager, Screen
try:
    from KivyOnTop import register_topmost
except Exception as e:
    print("ERROR FOR KivyOnTop ", e)
    def register_topmost(*args):
        pass
import tkinter
tk = tkinter.Tk()
width = tk.winfo_screenwidth()
height = tk.winfo_screenheight()
tk.quit()

Window.size = (240, 60)
Window.top = 0
Window.left = width//2 - Window.size[0]//2

Builder.load_string('''
<InputScreen>: 
    BoxLayout:
        orientation: 'vertical'
        spacing:0
        padding:0
        BoxLayout:
            orientation: 'horizontal'
            spacing:0
            Button:
                id:start
                font_size:'24sp'
                text:'start/reset'
                on_press:root.start()
''')

class InputScreen(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.mental_flow_time = 30
        self.reset()

    def setTime(self, stop_time, key):
        self.interval = abs(time() - stop_time)
        hours = int(self.interval / 60 / 60)
        mins = int((self.interval - hours * 60 * 60) / 60)
        seconds = int(self.interval - hours * 60 * 60 - mins * 60)
        self.ids["start"].text = "{:0>2d}:{:0>2d}:{:0>2d}".format(hours, mins, seconds)

    def start(self):
        if self.running:
            self.reset()
        else:
            self.event = Clock.schedule_interval(partial(self.setTime, time() + self.mental_flow_time * 60), 0.1)
            self.running = True

    def reset(self):
        self.running = False
        self.ids["start"].text = "{} min".format(self.mental_flow_time)
        if hasattr(self, "event"):
            self.event.cancel()
            self.running = False

class MyApp(App):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.title = '心流'
    def build(self):
        return InputScreen()
    
if __name__ == '__main__':
    app = MyApp()
    register_topmost(Window,str(app.title))
    app.run()

python test.py

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值