心流状态介绍
Kivy介绍
能够全平台开发App,支持windows,macos,linux,安卓等等
PS:本文的窗口 保持在最前功能,调用了KivyOnTop,只支持Windows,
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