优化这段代码import tkinter as tk class TomatoClock: def init(self, work_time=25, rest_time=5, long_rest_time=15): self.work_time = work_time * 60 self.rest_time = rest_time * 60 self.long_rest_time = long_rest_time * 60 self.count = 0 self.is_working = False self.window = tk.Tk() self.window.title("番茄钟") self.window.geometry("300x200") self.window.config(background='white') self.window.option_add("*Font", ("Arial", 20)) self.label = tk.Label(self.window, text="番茄钟", background='white') self.label.pack(pady=10) self.time_label = tk.Label(self.window, text="", background='white') self.time_label.pack(pady=20) self.start_button = tk.Button(self.window, text="开始", command=self.start_timer, background='white') self.start_button.pack(pady=10) def start_timer(self): self.is_working = not self.is_working if self.is_working: self.count += 1 if self.count % 8 == 0: self.count_down(self.long_rest_time) self.label.config(text="休息时间", foreground='white', background='lightblue') elif self.count % 2 == 0: self.count_down(self.rest_time) self.label.config(text="休息时间", foreground='white', background='lightgreen') else: self.count_down(self.work_time) self.label.config(text="工作时间", foreground='white', background='pink') else: self.label.config(text="番茄钟", foreground='black', background='white') def count_down(self, seconds): if seconds == self.work_time: self.window.config(background='pink') else: self.window.config(background='lightgreen' if seconds == self.rest_time else 'lightblue') if seconds == self.long_rest_time: self.count = 0 minute = seconds // 60 second = seconds % 60 self.time_label.config(text="{:02d}:{:02d}".format(minute, second)) if seconds > 0: self.window.after(1000, self.count_down, seconds - 1) else: self.start_timer() def run(self): self.window.mainloop() if name == 'main': clock = TomatoClock() clock.run()
时间: 2024-02-20 17:02:27 浏览: 155
1. 将所有的 import 语句放在代码的开头,这样可以更好地组织代码。
2. 将类的初始化方法中的窗口设置操作单独写一个方法,这样可以使代码更清晰。
3. 将计时器操作单独写一个方法,这样可以使代码更清晰。
4. 将计时器中的重复代码提取出来,写成一个单独的函数,这样可以避免代码重复。
5. 在计时器操作中使用 if-elif-else 语句代替多个 if 语句,这样可以使代码更简洁。
6. 在计时器操作中使用字典代替 if-elif-else 语句,这样可以使代码更简洁。
7. 在计时器操作中使用变量代替多个计算结果,这样可以避免重复计算。
8. 添加注释,使代码更易读。
下面是优化后的代码:
```python
import tkinter as tk
class TomatoClock:
def __init__(self, work_time=25, rest_time=5, long_rest_time=15):
# 将分钟转换为秒钟
self.work_time = work_time * 60
self.rest_time = rest_time * 60
self.long_rest_time = long_rest_time * 60
self.count = 0
self.is_working = False
self.window = tk.Tk()
self.init_window()
self.init_widgets()
def init_window(self):
self.window.title("番茄钟")
self.window.geometry("300x200")
self.window.config(background='white')
self.window.option_add("*Font", ("Arial", 20))
def init_widgets(self):
self.label = tk.Label(self.window, text="番茄钟", background='white')
self.label.pack(pady=10)
self.time_label = tk.Label(self.window, text="", background='white')
self.time_label.pack(pady=20)
self.start_button = tk.Button(self.window, text="开始", command=self.start_timer, background='white')
self.start_button.pack(pady=10)
def start_timer(self):
self.is_working = not self.is_working
if self.is_working:
self.count += 1
# 使用字典代替 if-elif-else 语句
timer_dict = {
0: (self.work_time, "工作时间", 'pink'),
1: (self.rest_time, "休息时间", 'lightgreen'),
7: (self.long_rest_time, "休息时间", 'lightblue')
}
timer_info = timer_dict.get(self.count % 8)
self.count_down(*timer_info)
else:
self.label.config(text="番茄钟", foreground='black', background='white')
def count_down(self, seconds, label_text, window_color):
# 将计算结果存入变量中,避免重复计算
minute, second = divmod(seconds, 60)
self.time_label.config(text="{:02d}:{:02d}".format(minute, second))
self.window.config(background=window_color)
if seconds > 0:
# 使用单独的函数,避免代码重复
self.window.after(1000, self.count_down, seconds - 1, label_text, window_color)
else:
self.start_timer()
def run(self):
self.window.mainloop()
if __name__ == '__main__':
clock = TomatoClock()
clock.run()
```
阅读全文