工资实时小助手-优秀牛马自我驱动

查看 92|回复 9
作者:浮影   
工资实时计算机,刷的短视频,看着挺好玩的,就diy了一下
功能就是实时看牛马费,以及可以计算还剩多少天发牛马费。


1111.png (10.69 KB, 下载次数: 0)
下载附件
2025-5-7 21:12 上传

运行后会生成一个json的配置文件,启动和结束工作会生成一个当天数据的json文件,其他没啥东西~~~
[Python] 纯文本查看 复制代码import tkinter as tk
from tkinter import ttk, messagebox
import json
import os
from datetime import datetime, timedelta
class SalaryCalculator:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("工资实时计算机")
        self.root.resizable(True, True)
        self.center_window(400, 245)
        
        # 初始化状态
        self.current_frame = None
        self.running = False
        self.start_time = None
        self.total_earned = 0.0
        self.elapsed_seconds = 0
        self.daily_data = {}
        
        # 文件配置
        self.config_file = "work_config.json"
        self.json_filename = f"data_{datetime.now().strftime('%Y-%m-%d')}.json"
        self.config = self.load_config()
        
        # 创建界面
        self.create_input_frame()
        self.create_work_frame()
        self.load_daily_data()
        
        # 启动检测
        self.switch_frame(self.input_frame)
        self.root.protocol("WM_DELETE_WINDOW", self.on_close)
        self.check_payday()
        self.root.mainloop()
    def center_window(self, width, height):
        screen_width = self.root.winfo_screenwidth()
        screen_height = self.root.winfo_screenheight()
        x = (screen_width - width) // 2
        y = (screen_height - height) // 2
        self.root.geometry(f"{width}x{height}+{x}+{y}")
    def create_input_row(self, parent, label_text, config_key):
        frame = ttk.Frame(parent)
        label = ttk.Label(frame, text=label_text, width=15, anchor="e")
        label.pack(side=tk.LEFT, padx=5)
        entry = ttk.Entry(frame, validate="key")
        val_func = self.validate_payday if config_key == 'payday' else self.validate_number
        entry['validatecommand'] = (entry.register(val_func), '%P')
        entry.insert(0, str(self.config[config_key]))
        entry.pack(side=tk.RIGHT, expand=True, fill=tk.X, padx=5)
        frame.pack(fill=tk.X, pady=5)
        return entry
    def create_input_frame(self):
        self.input_frame = ttk.Frame(self.root, padding=20)
        
        self.salary_entry = self.create_input_row(self.input_frame, "月薪(人民币):", "monthly_salary")
        self.hours_entry = self.create_input_row(self.input_frame, "每日工作时长(小时):", "daily_hours")
        self.days_entry = self.create_input_row(self.input_frame, "每月工作天数:", "work_days")
        self.payday_entry = self.create_input_row(self.input_frame, "发薪日(1-31):", "payday")
        ttk.Separator(self.input_frame, orient=tk.HORIZONTAL).pack(fill=tk.X, pady=10)
        self.start_btn = ttk.Button(self.input_frame, text="开始工作", command=self.start_work)
        self.start_btn.pack(fill=tk.X, pady=5)
    def create_work_frame(self):
        self.work_frame = ttk.Frame(self.root, padding=20)
        
        # 状态显示
        status_box = ttk.Frame(self.work_frame)
        self.status_label = ttk.Label(status_box, text="正在上班中", font=('Arial', 14, 'bold'))
        self.status_label.pack(pady=5)
        status_box.pack(fill=tk.X)
        # 发薪状态提示
        self.payday_box = ttk.Frame(self.work_frame)
        self.payday_label = ttk.Label(
            self.payday_box,
            text="",
            font=('Arial', 12, 'bold'),
            foreground='#FF6600'
        )
        self.payday_label.pack()
        self.payday_box.pack(fill=tk.X, pady=5)
        # 时间显示
        time_box = ttk.Frame(self.work_frame)
        self.time_label = ttk.Label(time_box, text="00:00:00:00", font=('Arial', 24))
        self.time_label.pack()
        time_box.pack(expand=True, fill=tk.BOTH)
        # 金额显示
        earned_box = ttk.Frame(self.work_frame)
        self.earned_label = ttk.Label(earned_box, text="已挣取:0.00 元", font=('Arial', 12))
        self.earned_label.pack()
        earned_box.pack(fill=tk.X)
        # 操作按钮
        btn_box = ttk.Frame(self.work_frame)
        self.stop_btn = ttk.Button(btn_box, text="结束工作", command=self.stop_work)
        self.stop_btn.pack(fill=tk.X)
        btn_box.pack(fill=tk.X, pady=10)
    def validate_number(self, value):
        return value.replace('.', '', 1).isdigit() or value == ""
   
    def validate_payday(self, value):
        return value.isdigit() and 1

牛马, 错误

helh0275   

你这个是真小众啊,何必自我鞭挞
han163426   

不会是看着这个摸鱼吧哈哈哈哈哈
ManaCola   

牛的,看着这个,摸鱼更带劲了
浮影
OP
  


ManaCola 发表于 2025-5-7 21:51
牛的,看着这个,摸鱼更带劲了

我也这么觉得
laoai666   

真的难绷
wraefw   

一小时36块钱是吧
li000yu   

666,难绷
ice317   

你这个真的,有点无奈的笑,建议整个下班倒计时,下班倒计时更有感觉
浮影
OP
  


ice317 发表于 2025-5-7 22:33
你这个真的,有点无奈的笑,建议整个下班倒计时,下班倒计时更有感觉

优秀牛马是没有下班哒
您需要登录后才可以回帖 登录 | 立即注册

返回顶部