基于Python和Tkinter實(shí)現(xiàn)高考倒計(jì)時(shí)功能
一、軟件概述:
這款高考倒計(jì)時(shí)軟件的核心功能是展示距離高考的剩余天數(shù),以及設(shè)置多個(gè)復(fù)習(xí)目標(biāo)的倒計(jì)時(shí)。除了基本的倒計(jì)時(shí)功能,它還支持勵(lì)志語句顯示、目標(biāo)管理等功能,幫助你保持高效的復(fù)習(xí)節(jié)奏。
該軟件界面簡(jiǎn)潔,操作簡(jiǎn)單,且支持個(gè)性化設(shè)置。通過靈活的目標(biāo)管理,用戶可以設(shè)置多個(gè)關(guān)鍵時(shí)間點(diǎn),并通過實(shí)時(shí)更新的倒計(jì)時(shí)幫助自己專注于每一個(gè)目標(biāo)。
二、功能亮點(diǎn):
1. 高考倒計(jì)時(shí)
這是軟件的核心功能,能夠?qū)崟r(shí)顯示距離高考的剩余天數(shù)、小時(shí)和分鐘。每當(dāng)你看到倒計(jì)時(shí)的數(shù)字,都會(huì)提醒你珍惜剩下的每一秒鐘,不斷努力。
2. 添加目標(biāo)倒計(jì)時(shí)
除了高考這個(gè)主要目標(biāo)外,你還可以設(shè)置其他的學(xué)習(xí)目標(biāo),比如模擬考試時(shí)間、學(xué)科復(fù)習(xí)進(jìn)度等。每個(gè)目標(biāo)都可以設(shè)置日期、時(shí)間,軟件會(huì)自動(dòng)倒計(jì)時(shí),幫助你規(guī)劃每個(gè)階段的任務(wù)。
3. 勵(lì)志語句
每天在軟件界面下方,都會(huì)顯示一條勵(lì)志語句,幫助你在備考過程中保持積極的心態(tài)。這些語句隨機(jī)生成,既可以激勵(lì)你,也能緩解壓力。
4. 透明度調(diào)節(jié)與圓角設(shè)計(jì)
為了讓軟件界面更加美觀,我們?yōu)榇翱谠O(shè)計(jì)了圓角效果,同時(shí)支持透明度調(diào)節(jié)功能。你可以根據(jù)個(gè)人喜好調(diào)整窗口的透明度,既能讓軟件不占用太多桌面空間,又能確保時(shí)刻查看到倒計(jì)時(shí)。
5. 目標(biāo)管理
用戶可以通過右鍵菜單,方便地添加、刪除和修改目標(biāo)。當(dāng)某個(gè)目標(biāo)完成時(shí),可以及時(shí)刪除或更改它,確保你的目標(biāo)始終是最新的。
6. 開機(jī)啟動(dòng)與置頂功能
為方便使用,軟件支持設(shè)置為開機(jī)自動(dòng)啟動(dòng),并且可以設(shè)置窗口始終置頂,確保你隨時(shí)可以看到剩余時(shí)間,不會(huì)錯(cuò)過任何一個(gè)重要時(shí)刻。
7. 控制面板
控制面板是軟件的配置界面,用戶可以通過它來設(shè)置一些個(gè)性化的選項(xiàng)。例如:
- 透明度控制:你可以調(diào)整軟件的透明度,以便在桌面上自由擺放。
- 目標(biāo)管理:可以添加新目標(biāo)、修改現(xiàn)有目標(biāo)或刪除目標(biāo)。
- 窗口置頂與開機(jī)啟動(dòng):軟件可以設(shè)置為窗口始終置頂,或者設(shè)置為開機(jī)時(shí)自動(dòng)啟動(dòng)。
- 激勵(lì)語句切換:通過切換激勵(lì)語句,給自己帶來不一樣的動(dòng)力。
三、運(yùn)行效果:


四、技術(shù)實(shí)現(xiàn):
這款高考倒計(jì)時(shí)軟件基于Python和Tkinter開發(fā),以下是一些實(shí)現(xiàn)的技術(shù)細(xì)節(jié)。
1. 設(shè)置窗口透明度與圓角
使用 win32gui 庫,代碼如下:
import win32gui
import win32con
import win32api
def set_rounded_corners(self):
"""設(shè)置窗口圓角和透明度"""
hwnd = self.root.winfo_id()
style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, style | win32con.WS_POPUP)
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) | win32con.WS_EX_LAYERED)
self._region = win32gui.CreateRoundRectRgn(0, 0, self.root.winfo_width() + 1, self.root.winfo_height() + 1, 40, 40)
win32gui.SetWindowRgn(hwnd, self._region, True)
win32gui.SetLayeredWindowAttributes(hwnd, 0, int(0.8 * 255), win32con.LWA_ALPHA)
- 倒計(jì)時(shí)功能實(shí)現(xiàn) 倒計(jì)時(shí)的核心邏輯是計(jì)算當(dāng)前時(shí)間與目標(biāo)時(shí)間的差值,通過 datetime 庫來實(shí)時(shí)更新剩余時(shí)間。
import datetime
def update_countdown(self):
now = datetime.datetime.now()
target = self.config['targets'][self.current_target_index]
time_str = target.get('time', '00:00')
target_datetime = datetime.datetime.strptime(f"{target['date']} {time_str}", '%Y-%m-%d %H:%M')
delta = target_datetime - now
self.days_label.config(text=str(delta.days) + " 天")
self.countdown_label.config(text=f"{delta.hours}小時(shí){delta.minutes}分鐘")
self.date_label.config(text=f"{target['date']} {time_str}")
這段代碼會(huì)計(jì)算從當(dāng)前時(shí)間到目標(biāo)時(shí)間的時(shí)間差,并更新界面上的倒計(jì)時(shí)顯示。
- 激勵(lì)語句 為了讓備考過程不枯燥,我們使用API隨機(jī)獲取勵(lì)志語句,并在軟件界面下方展示。
def get_motto(self):
try:
response = requests.get('https://jkapi.com/api/one_yan?type=json', timeout=5)
if response.status_code == 200:
data = response.json()
return data.get('content', random.choice(self.default_mottos))
except:
pass
return random.choice(self.default_mottos)
通過這段代碼,我們確保每天都能看到新的激勵(lì)語句,給自己帶來新的動(dòng)力。
五、總結(jié) :
這款高考倒計(jì)時(shí)軟件不僅幫助你清晰地管理剩余時(shí)間,還通過多種人性化的功能幫助你保持積極心態(tài),迎接高考的挑戰(zhàn)。通過透明度調(diào)節(jié)、目標(biāo)管理、勵(lì)志語句等功能,讓你在高考備考過程中始終保持動(dòng)力,不輕言放棄。 希望這款軟件能夠成為你備考路上的得力助手,祝你在高考中取得好成績(jī),邁向更加輝煌的未來!
六、相關(guān)源碼:
import tkinter as tk
from tkinter import ttk
import datetime
import json
import os
import sys
import random
import requests
from tkinter import messagebox
class CountdownTimer:
def __init__(self):
self.root = tk.Tk()
self.root.title("高考倒計(jì)時(shí)軟件")
self.root.attributes('-alpha', 0.8) # 設(shè)置初始透明度
self.root.overrideredirect(True) # 無邊框窗口
# 設(shè)置窗口大小
self.root.geometry('300x240')
# 設(shè)置窗口背景為白色
self.root.configure(bg='white')
# 設(shè)置窗口透明度
self.root.attributes('-alpha', 0.8)
# 設(shè)置圓角窗口
self.set_rounded_corners()
def set_rounded_corners(self):
"""設(shè)置窗口圓角"""
import win32gui
import win32con
import win32api
# 等待窗口完全加載
self.root.update_idletasks()
# 獲取窗口句柄
hwnd = self.root.winfo_id()
# 獲取窗口當(dāng)前樣式
style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
# 設(shè)置窗口樣式
win32gui.SetWindowLong(
hwnd,
win32con.GWL_STYLE,
style | win32con.WS_POPUP
)
# 設(shè)置窗口為圓角并啟用分層窗口
win32gui.SetWindowLong(
hwnd,
win32con.GWL_EXSTYLE,
win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) | win32con.WS_EX_LAYERED
)
# 設(shè)置窗口為圓角
self._region = win32gui.CreateRoundRectRgn(
0, 0,
self.root.winfo_width() + 1,
self.root.winfo_height() + 1,
40, 40 # 圓角的寬度和高度
)
win32gui.SetWindowRgn(hwnd, self._region, True)
# 設(shè)置窗口透明色鍵,使圓角外區(qū)域完全透明
win32gui.SetLayeredWindowAttributes(hwnd, 0, int(0.8 * 255), win32con.LWA_ALPHA)
# 保存窗口位置用的變量
self.x = 0
self.y = 0
# 加載配置
self.config = self.load_config()
# 當(dāng)前顯示的目標(biāo)索引
self.current_target_index = 0
# 主框架
self.main_frame = tk.Frame(self.root, bg='white')
self.main_frame.pack(padx=10, pady=5)
# 標(biāo)題顯示(第一行)
self.title_label = tk.Label(
self.main_frame,
text="", # 將在update_countdown中設(shè)置
font=("微軟雅黑", 14),
fg='#4169E1',
bg='white'
)
self.title_label.pack()
# 剩余天數(shù)顯示(第二行)
self.days_label = tk.Label(
self.main_frame,
text="",
font=("微軟雅黑", 30, "bold"),
fg='#FF4500',
bg='white'
)
self.days_label.pack()
# 倒計(jì)時(shí)顯示(第三行)
self.countdown_label = tk.Label(
self.main_frame,
text="",
font=("微軟雅黑", 16, ),
fg='#758796',
bg='white'
)
self.countdown_label.pack()
# 日期顯示(第四行)
self.date_label = tk.Label(
self.main_frame,
text="",
font=("微軟雅黑", 12),
fg='#696969',
bg='white'
)
self.date_label.pack()
# 默認(rèn)激勵(lì)語句列表
self.default_mottos = [
"不明白你們遇到好事,為什么要掐腿揉眼睛,真醒了怎么辦?",
"天道酬勤,未來可期。",
"一分耕耘,一分收獲。",
"堅(jiān)持就是勝利。",
"相信自己,你就是最好的。",
"付出終有回報(bào),努力不會(huì)白費(fèi)。"
]
# 當(dāng)前使用的激勵(lì)語句
self.current_motto = self.get_motto()
# 激勵(lì)文字
self.motto_label = tk.Label(
self.main_frame,
text=self.current_motto,
font=("微軟雅黑", 10),
fg='#77C5E6',
bg='white',
wraplength=260, # 設(shè)置較小的換行寬度以確保兩行顯示
height=3 # 設(shè)置固定高度為2行
)
self.motto_label.pack()
# 添加切換按鈕框架
self.button_frame = tk.Frame(self.main_frame, bg='white')
self.button_frame.pack(pady=5)
# 添加目標(biāo)指示器框架
self.dots_frame = tk.Frame(self.button_frame, bg='white')
self.dots_frame.pack()
# 存儲(chǔ)圓點(diǎn)標(biāo)簽的列表
self.dot_labels = []
# 控制面板
self.control_window = None
# 綁定鼠標(biāo)事件
self.root.bind('<Button-1>', self.save_last_click)
self.root.bind('<B1-Motion>', self.drag_window)
self.root.bind('<Button-3>', self.show_control_panel)
# 開始倒計(jì)時(shí)
self.update_countdown()
# 修復(fù)所有方法的縮進(jìn),確保它們都是 CountdownTimer 類的直接方法
def load_config(self):
default_config = {
'transparency': 0.8,
'targets': [
{
'name': '高考',
'date': '2025-06-07'
}
],
'position': [100, 100],
'topmost': False,
'auto_start': False
}
try:
if os.path.exists('gaokao_config.json'):
with open('gaokao_config.json', 'r', encoding='utf-8') as f:
config = json.load(f)
if not all(key in config for key in default_config.keys()):
return default_config
return config
return default_config
except:
return default_config
def save_config(self):
with open('gaokao_config.json', 'w', encoding='utf-8') as f:
json.dump(self.config, f, ensure_ascii=False, indent=2)
def save_last_click(self, event):
self.x = event.x
self.y = event.y
def drag_window(self, event):
new_x = self.root.winfo_x() + (event.x - self.x)
new_y = self.root.winfo_y() + (event.y - self.y)
self.root.geometry(f"+{new_x}+{new_y}")
self.config['position'] = [new_x, new_y]
self.save_config()
def show_control_panel(self, event):
if self.control_window is None or not tk.Toplevel.winfo_exists(self.control_window):
self.control_window = tk.Toplevel(self.root)
self.control_window.title("設(shè)置")
self.control_window.geometry('300x520')
self.control_window.resizable(False, False)
# 創(chuàng)建主框架并添加內(nèi)邊距
main_frame = tk.Frame(self.control_window, padx=20, pady=10)
main_frame.pack(fill='both', expand=True)
# 透明度控制區(qū)域
transparency_frame = tk.LabelFrame(main_frame, text="透明度設(shè)置", padx=10, pady=5)
transparency_frame.pack(fill='x', pady=(0, 10))
transparency = ttk.Scale(
transparency_frame,
from_=0.1,
to=1.0,
value=self.config['transparency'],
command=self.update_transparency
)
transparency.pack(fill='x', pady=5)
# 目標(biāo)管理區(qū)域
targets_frame = tk.LabelFrame(main_frame, text="倒計(jì)時(shí)目標(biāo)管理", padx=10, pady=5)
targets_frame.pack(fill='both', expand=True)
# 目標(biāo)列表框架
self.target_frame = tk.Frame(targets_frame)
self.target_frame.pack(fill='both', expand=True, pady=5)
# 添加目標(biāo)按鈕
add_button = tk.Button(
targets_frame,
text="添加新目標(biāo)",
command=self.add_target,
width=15
)
add_button.pack(pady=10)
# 添加窗口置頂和開機(jī)啟動(dòng)選項(xiàng)
options_frame = tk.LabelFrame(main_frame, text="其他設(shè)置", padx=10, pady=5)
options_frame.pack(fill='x', pady=(0, 10))
# 窗口置頂選項(xiàng)
self.topmost_var = tk.BooleanVar(value=self.config.get('topmost', False))
topmost_check = tk.Checkbutton(
options_frame,
text="窗口置頂",
variable=self.topmost_var,
command=self.toggle_topmost
)
topmost_check.pack(anchor='w')
# 開機(jī)啟動(dòng)選項(xiàng)
self.auto_start_var = tk.BooleanVar(value=self.config.get('auto_start', False))
auto_start_check = tk.Checkbutton(
options_frame,
text="開機(jī)啟動(dòng)",
variable=self.auto_start_var,
command=self.toggle_auto_start
)
auto_start_check.pack(anchor='w')
# 添加切換激勵(lì)語句和關(guān)閉程序按鈕的框架
buttons_frame = tk.Frame(main_frame)
buttons_frame.pack(fill='x', pady=10)
# 添加切換激勵(lì)語句按鈕(靠左)
change_motto_button = tk.Button(
buttons_frame,
text="切換激勵(lì)語句",
command=self.change_motto,
width=15
)
change_motto_button.pack(side='left', padx=5)
# 添加關(guān)閉程序按鈕(靠右)
close_button = tk.Button(
buttons_frame,
text="關(guān)閉程序",
command=self.confirm_exit,
fg='red',
width=15
)
close_button.pack(side='right', padx=5)
self.update_target_list()
def update_transparency(self, value):
transparency = float(value)
self.root.attributes('-alpha', transparency)
self.config['transparency'] = transparency
self.save_config()
def add_target(self):
# 檢查目標(biāo)數(shù)量是否已達(dá)到上限
if len(self.config['targets']) >= 5:
tk.messagebox.showwarning("提示", "最多只能添加5個(gè)倒計(jì)時(shí)目標(biāo)")
return
dialog = tk.Toplevel(self.control_window)
dialog.title("添加目標(biāo)")
dialog.geometry('300x250')
dialog.resizable(False, False)
# 創(chuàng)建主框架
main_frame = tk.Frame(dialog, padx=20, pady=10)
main_frame.pack(fill='both', expand=True)
# 名稱輸入?yún)^(qū)域
name_frame = tk.Frame(main_frame)
name_frame.pack(fill='x', pady=(0, 10))
tk.Label(name_frame, text="目標(biāo)名稱:", width=10, anchor='w').pack(side='left')
name_entry = tk.Entry(name_frame)
name_entry.pack(side='left', fill='x', expand=True)
# 日期輸入?yún)^(qū)域
date_frame = tk.Frame(main_frame)
date_frame.pack(fill='x', pady=(0, 10))
tk.Label(date_frame, text="目標(biāo)日期:", width=10, anchor='w').pack(side='left')
# 年份輸入
year_var = tk.StringVar(value=str(datetime.datetime.now().year))
year_spinbox = ttk.Spinbox(date_frame, from_=2024, to=2100, width=5, textvariable=year_var)
year_spinbox.pack(side='left')
tk.Label(date_frame, text="年").pack(side='left', padx=2)
# 月份輸入
month_var = tk.StringVar(value='01')
month_spinbox = ttk.Spinbox(date_frame, from_=1, to=12, width=3, textvariable=month_var, format='%02.0f')
month_spinbox.pack(side='left')
tk.Label(date_frame, text="月").pack(side='left', padx=2)
# 日期輸入
day_var = tk.StringVar(value='01')
day_spinbox = ttk.Spinbox(date_frame, from_=1, to=31, width=3, textvariable=day_var, format='%02.0f')
day_spinbox.pack(side='left')
tk.Label(date_frame, text="日").pack(side='left', padx=2)
# 時(shí)間輸入?yún)^(qū)域
time_frame = tk.Frame(main_frame)
time_frame.pack(fill='x', pady=(0, 20))
tk.Label(time_frame, text="目標(biāo)時(shí)間:", width=10, anchor='w').pack(side='left')
# 小時(shí)輸入
hour_var = tk.StringVar(value='00')
hour_spinbox = ttk.Spinbox(time_frame, from_=0, to=23, width=3, textvariable=hour_var, format='%02.0f')
hour_spinbox.pack(side='left')
tk.Label(time_frame, text=":").pack(side='left', padx=2)
# 分鐘輸入
minute_var = tk.StringVar(value='00')
minute_spinbox = ttk.Spinbox(time_frame, from_=0, to=59, width=3, textvariable=minute_var, format='%02.0f')
minute_spinbox.pack(side='left')
# 按鈕區(qū)域
button_frame = tk.Frame(main_frame)
button_frame.pack(side='bottom', pady=(0, 10))
def save():
name = name_entry.get().strip()
year = year_var.get().zfill(4)
month = month_var.get().zfill(2)
day = day_var.get().zfill(2)
hour = hour_var.get().zfill(2)
minute = minute_var.get().zfill(2)
if not name:
tk.messagebox.showwarning("提示", "請(qǐng)輸入目標(biāo)名稱")
return
date = f"{year}-{month}-{day}"
try:
datetime.datetime.strptime(f"{date} {hour}:{minute}", '%Y-%m-%d %H:%M')
self.config['targets'].append({
'name': name,
'date': date,
'time': f"{hour}:{minute}"
})
self.save_config()
self.update_target_list()
dialog.destroy()
except ValueError:
tk.messagebox.showerror("錯(cuò)誤", "日期無效,請(qǐng)檢查輸入")
# 取消按鈕
tk.Button(button_frame, text="取消", width=10, command=dialog.destroy).pack(side='left', padx=5)
# 保存按鈕
tk.Button(button_frame, text="保存", width=10, command=save).pack(side='left', padx=5)
def update_target_list(self):
for widget in self.target_frame.winfo_children():
widget.destroy()
for i, target in enumerate(self.config['targets']):
frame = tk.Frame(self.target_frame)
frame.pack(fill='x', pady=2)
time_str = target.get('time', '00:00')
tk.Label(
frame,
text=f"{target['name']}: {target['date']} {time_str}",
anchor='w'
).pack(side='left', fill='x', expand=True)
tk.Button(
frame,
text="刪除",
command=lambda idx=i: self.delete_target(idx),
width=6
).pack(side='right')
def confirm_exit(self):
if tk.messagebox.askokcancel("確認(rèn)", "確定要關(guān)閉程序嗎?"):
self.root.quit()
self.root.destroy()
def delete_target(self, index):
self.config['targets'].pop(index)
# 如果刪除的是當(dāng)前顯示的目標(biāo),調(diào)整當(dāng)前索引
if index == self.current_target_index:
self.current_target_index = 0
elif index < self.current_target_index:
self.current_target_index -= 1
self.save_config()
self.update_target_list()
self.update_countdown()
def get_motto(self):
"""獲取激勵(lì)語句,優(yōu)先從API獲取,失敗則使用默認(rèn)語句"""
try:
response = requests.get('https://jkapi.com/api/one_yan?type=json', timeout=5)
if response.status_code == 200:
data = response.json()
return data.get('content', random.choice(self.default_mottos))
except:
pass
return random.choice(self.default_mottos)
def update_countdown(self):
now = datetime.datetime.now()
# 不再每次更新激勵(lì)語句
# self.motto_label.config(text=self.get_motto())
# 檢查是否有目標(biāo)
if not self.config['targets']:
self.title_label.config(text="沒有設(shè)置倒計(jì)時(shí)目標(biāo)")
self.days_label.config(text="請(qǐng)右鍵添加目標(biāo)")
self.countdown_label.config(text="")
self.date_label.config(text="")
self.update_count_label()
self.root.after(1000, self.update_countdown)
return
# 確保當(dāng)前索引在有效范圍內(nèi)
if self.current_target_index >= len(self.config['targets']):
self.current_target_index = 0
# 只顯示當(dāng)前選中的目標(biāo)
target = self.config['targets'][self.current_target_index]
time_str = target.get('time', '00:00')
target_datetime = datetime.datetime.strptime(f"{target['date']} {time_str}", '%Y-%m-%d %H:%M')
delta = target_datetime - now
# 獲取年份
year = target_datetime.year
# 更新標(biāo)題(第一行)- 距離2025年"項(xiàng)目標(biāo)題"還有:
self.title_label.config(text=f"距離{year}年{target['name']}")
# 處理目標(biāo)日期已過的情況
if delta.days < 0:
# 第二行 - 顯示剩余天數(shù)
self.days_label.config(text="0天(已結(jié)束)")
# 第三行 - 顯示倒計(jì)時(shí)
self.countdown_label.config(text="0小時(shí)0分0秒")
else:
days = delta.days
hours = delta.seconds // 3600
minutes = (delta.seconds % 3600) // 60
seconds = delta.seconds % 60
# 第二行 - 顯示剩余天數(shù)
self.days_label.config(text=f"{days}天")
# 第三行 - 顯示倒計(jì)時(shí)
self.countdown_label.config(text=f"{hours}小時(shí){minutes}分{seconds}秒")
# 第四行 - 顯示倒計(jì)時(shí)日期
formatted_date = target_datetime.strftime("%Y年%m月%d日")
self.date_label.config(text=formatted_date)
self.update_count_label()
self.root.after(1000, self.update_countdown)
def update_count_label(self):
"""更新目標(biāo)指示器顯示"""
total = len(self.config['targets'])
# 清除現(xiàn)有的圓點(diǎn)
for dot in self.dot_labels:
dot.destroy()
self.dot_labels.clear()
# 如果只有一個(gè)目標(biāo)或沒有目標(biāo),不顯示圓點(diǎn)
if total <= 1:
return
# 為每個(gè)目標(biāo)創(chuàng)建一個(gè)圓點(diǎn)
for i in range(total):
dot = tk.Label(
self.dots_frame,
text="●",
font=("微軟雅黑", 8),
fg='#D3D3D3' if i != self.current_target_index else '#4169E1',
bg='white',
cursor='hand2' # 添加手型光標(biāo)
)
dot.pack(side='left', padx=2)
# 綁定點(diǎn)擊事件
dot.bind('<Button-1>', lambda e, idx=i: self.switch_to_target(idx))
self.dot_labels.append(dot)
def switch_to_target(self, index):
"""切換到指定目標(biāo)"""
if self.config['targets']:
self.current_target_index = index
self.update_countdown()
def toggle_topmost(self):
"""切換窗口置頂狀態(tài)"""
is_topmost = self.topmost_var.get()
self.root.attributes('-topmost', is_topmost)
self.config['topmost'] = is_topmost
self.save_config()
def change_motto(self):
"""切換激勵(lì)語句"""
new_motto = self.get_motto()
self.current_motto = new_motto
self.motto_label.config(text=new_motto)
def toggle_auto_start(self):
"""切換開機(jī)啟動(dòng)狀態(tài)"""
import winreg
key_path = r'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
app_path = os.path.abspath(sys.argv[0])
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path, 0, winreg.KEY_ALL_ACCESS)
if self.auto_start_var.get():
winreg.SetValueEx(key, 'GaokaoCountdown', 0, winreg.REG_SZ, app_path)
else:
try:
winreg.DeleteValue(key, 'GaokaoCountdown')
except WindowsError:
pass
winreg.CloseKey(key)
self.config['auto_start'] = self.auto_start_var.get()
self.save_config()
except Exception as e:
messagebox.showerror("錯(cuò)誤", f"設(shè)置開機(jī)啟動(dòng)失敗:{str(e)}")
self.auto_start_var.set(not self.auto_start_var.get())
def run(self):
# 設(shè)置初始位置
if 'position' in self.config:
self.root.geometry(f"+{self.config['position'][0]}+{self.config['position'][1]}")
# 設(shè)置初始透明度
self.root.attributes('-alpha', self.config['transparency'])
# 設(shè)置窗口置頂狀態(tài)
if self.config.get('topmost', False):
self.root.attributes('-topmost', True)
self.root.mainloop()
if __name__ == "__main__":
app = CountdownTimer()
app.run()
到此這篇關(guān)于基于Python和Tkinter實(shí)現(xiàn)高考倒計(jì)時(shí)功能的文章就介紹到這了,更多相關(guān)Python Tkinter高考倒計(jì)時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python和NLTK進(jìn)行文本預(yù)處理示例詳解
文將介紹如何使用Python編程語言和NLTK(Natural Language Toolkit)庫進(jìn)行文本預(yù)處理,為后續(xù)的文本分析和機(jī)器學(xué)習(xí)任務(wù)做準(zhǔn)備,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-03-03
關(guān)于pycharm找不到MySQLdb模塊的解決方法
MySQLdb是用于Python鏈接Mysql數(shù)據(jù)庫的接口,它實(shí)現(xiàn)了Python數(shù)據(jù)庫API規(guī)范V2.0,基于MySql C API上建立的,本文給大家介紹pycharm找不到MySQLdb模塊解決方法,需要的朋友參考下吧2021-06-06
Python使用keras和tensorflow遇到的問題及解決
這篇文章主要介紹了Python使用keras和tensorflow遇到的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

