Skip to content

Commit c479678

Browse files
[投稿] 添加脚本: 习惯追踪器 — by 今晚打老虎🐯
1 parent ec5ed7d commit c479678

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# -*- coding: utf-8 -*-
2+
"""习惯追踪器 — 7 habits, streak, progress ring."""
3+
4+
from widget import Widget, family, SMALL, MEDIUM, LARGE
5+
import time, random
6+
7+
habits = [
8+
("💧", "喝水", True),
9+
("📖", "阅读", True),
10+
("🏃", "运动", False),
11+
("🧘", "冥想", True),
12+
("🍎", "水果", True),
13+
("😴", "早睡", False),
14+
("📝", "日记", True),
15+
]
16+
17+
done = sum(1 for *_, ok in habits if ok)
18+
total = len(habits)
19+
streak = 12
20+
21+
bg = {"gradient": ["#6366F1", "#8B5CF6"], "direction": "diagonal"}
22+
card_bg = ("#FFFFFF", "#1E1B4B")
23+
txt_main = ("#1E1B4B", "#E0E7FF")
24+
txt_sub = ("#6366F1", "#A5B4FC")
25+
done_clr = ("#22C55E", "#4ADE80")
26+
miss_clr = ("#E5E7EB", "#312E81")
27+
28+
w = Widget(background=bg, padding=12)
29+
30+
if family in (SMALL, "small"):
31+
with w.vstack(spacing=6):
32+
with w.hstack(spacing=6, align="center"):
33+
w.icon("checkmark.circle.fill", size=16, color="#A5B4FC")
34+
w.text("习惯", size=15, weight="bold", color="#FFFFFF")
35+
w.spacer()
36+
w.text(f"🔥{streak}天", size=12, color="#FDE68A")
37+
w.gauge(done, total, label="", size=54, color="#34D399",
38+
track_color=("#C7D2FE", "#312E81"), line_width=6)
39+
w.text(f"{done}/{total} 已完成", size=12, weight="medium",
40+
color="#E0E7FF", align="center")
41+
42+
elif family in (MEDIUM, "medium"):
43+
with w.hstack(spacing=10):
44+
with w.vstack(spacing=4, padding=4):
45+
with w.hstack(spacing=4, align="center"):
46+
w.icon("checkmark.circle.fill", size=14, color="#A5B4FC")
47+
w.text("习惯追踪", size=14, weight="bold", color="#FFFFFF")
48+
w.spacer()
49+
w.gauge(done, total, label="", size=56, color="#34D399",
50+
track_color=("#C7D2FE", "#312E81"), line_width=6)
51+
w.text(f"{done}/{total}", size=11, color="#E0E7FF", align="center")
52+
with w.vstack(spacing=3):
53+
with w.hstack(spacing=4, align="center"):
54+
w.text(f"🔥 连续 {streak} 天", size=11, weight="semibold",
55+
color="#FDE68A")
56+
w.spacer()
57+
for emoji, name, ok in habits:
58+
with w.hstack(spacing=4, align="center"):
59+
w.text(emoji, size=12)
60+
w.text(name, size=11, color="#E0E7FF")
61+
w.spacer()
62+
w.icon("checkmark.circle.fill" if ok else "circle",
63+
size=13,
64+
color="#4ADE80" if ok else "#6366F1")
65+
66+
else:
67+
with w.vstack(spacing=6):
68+
with w.hstack(spacing=6, align="center"):
69+
w.icon("checkmark.circle.fill", size=18, color="#A5B4FC")
70+
w.text("习惯追踪器", size=17, weight="bold", color="#FFFFFF")
71+
w.spacer()
72+
w.text(f"🔥 连续 {streak} 天", size=13, weight="semibold",
73+
color="#FDE68A")
74+
w.divider(color="#818CF8")
75+
with w.hstack(spacing=8, align="center"):
76+
w.gauge(done, total, label="", size=64, color="#34D399",
77+
track_color=("#C7D2FE", "#312E81"), line_width=7)
78+
with w.vstack(spacing=2):
79+
w.text(f"{done}/{total} 已完成", size=13, weight="semibold",
80+
color="#E0E7FF")
81+
pct = int(done / total * 100)
82+
w.progress(done, total, color="#34D399", height=6,
83+
track_color=("#C7D2FE", "#312E81"))
84+
w.text(f"完成率 {pct}%", size=11, color="#A5B4FC")
85+
w.divider(color="#818CF8")
86+
with w.hstack(spacing=6):
87+
for emoji, name, ok in habits:
88+
with w.vstack(spacing=2, align="center"):
89+
w.text(emoji, size=18)
90+
w.icon("checkmark.circle.fill" if ok else "circle",
91+
size=14,
92+
color="#4ADE80" if ok else "#6366F1")
93+
94+
w.render()

0 commit comments

Comments
 (0)