编辑代码

import tkinter as tk
from tkinter import ttk, messagebox
from datetime import datetime, timedelta
def calculate_charging_details(a, b, c, d, e):
    x1 = (e - a) * d * c / 100
    current_time = datetime.now()
    x2 = current_time + timedelta(hours=(e - a) * d / (100 * b))
    charging_time_hours = (e - a) * d / (100 * b)
    charging_time_minutes = (charging_time_hours % 1) * 60
    x3 = f"{int(charging_time_hours)}小时{int(charging_time_minutes)}分"
    
    return x1, x2, x3
def update_result():
    try:
        a = float(entry_a.get())
        b = float(entry_b.get())
        c = float(entry_c.get())
        d = float(entry_d.get())
        e = float(entry_e.get())
    except ValueError:
        messagebox.showerror("错误", "请输入有效的数字")
        result_text.set("")
        return

    x1, x2, x3 = calculate_charging_details(a, b, c, d, e)
    
    result_text.set(f"费用:{x1:.2f}元\n"
                   f"时间:{x2:%H:%M:%S %Y-%m-%d}\n"
                   f"用时:{x3}")
root = tk.Tk()
root.title("充电计算器")
style = ttk.Style()
style.configure('TLabel', font=('Arial', 10))
style.configure('TEntry', font=('Arial', 10), relief='solid', borderwidth=1)
input_frame = ttk.Frame(root, padding="10")
input_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
labels = ('起始电量:', '充电功率:', '电费单价:', '电池容量:', '终止电量:')
entries = {}
for i, label in enumerate(labels, start=0):
    ttk.Label(input_frame, text=label).grid(row=i, column=0, sticky=tk.W, padx=5, pady=5)
    entry = ttk.Entry(input_frame, width=10)
    if label == '起始电量:':
        entry_a = entry
    elif label == '充电功率:':
        entry_b = entry
    elif label == '电费单价:':
        entry_c = entry
    elif label == '电池容量:':
        entry_d = entry
    elif label == '终止电量:':
        entry_e = entry
    entry.insert(0, f'{[12, 3.4, 1, 10.8, 100][i]}')
    entry.grid(row=i, column=1, padx=5, pady=5, sticky=tk.W)
    entries[label.split(':')[0].strip()] = entry
result_frame = ttk.Frame(root, padding="10")
result_frame.grid(row=1, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
result_text = tk.StringVar()
result_label = ttk.Label(result_frame, textvariable=result_text, justify=tk.LEFT, anchor='w', wraplength=400)
result_label.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
for entry in entries.values():
    entry.bind("<FocusOut>", lambda event: update_result())
update_result()
root.mainloop()