工作任务统计

机缘

提示:可以和大家分享最初成为创作者的初心
例如:

  1. 平时利用EXCEL文件来记录工作任务安排,但每次都而要打开文件进行查看,感觉不直观与方便,便利用python 将excel文件内容读取出来进行统计显示。每次开机自动启动,看着比较方便。
  2. 里面的代码都是从网络上搜索到的个个片段,没有啥效率可读性,目的就是解决问题。

 

#使用pandas统计数据比较容易

import numpy as np
import pandas as pd

df=pd.DataFrame(pd.read_excel('工作任务统计.xlsx',sheet_name=0))
#df.shape  #返回df的行数和列数  df.shape[0]#返回df的行数
print(df.shape[0])
aa=df['是否完成'].value_counts()#现在要统计是否完成出现的次数并制成一个新的DataFrame。
print(type(aa))
print(aa[0])
bb=df.groupby(by=['责任人','是否完成']).size()
print(type(bb))
print('..................................')
print(bb)
print('..................................')
cc=str(bb)  #将pandas.core.series.Series格式 转换为 字符串
dd=cc.split() #按空格对字符串进行格式化,
print(dd[2]+"未完成任务:"+dd[4]+"完成任务数:"+dd[6])
import textwrap
import time, threading
import tkinter as tk
import ttkbootstrap as ttk
from random import choice
from ttkbootstrap.constants import *
import openpyxl
from tkinter import messagebox  # 弹出提示框
from tkinter.scrolledtext import ScrolledText


def datastatistics():  # excel文件数据统计分析
    wb = openpyxl.load_workbook(r'D:\工作文件\2023年\2023年工作任务清单.xlsx')
    sheets = wb.sheetnames
    未完成任务 = []
    已完成任务 = []
    未完成任务计数 = 0
    未完成任务分类计数 = []
    已完成任务计数 = 0
    已完成任务分类计数 = []
    global 未完成人员计数
    global 每个人完成任务计数
    global 每个人未完成任务计数
    未完成人员计数=[]
    for i in range(len(sheets)):
        sheet = wb.get_sheet_by_name(sheets[i])
        # print('\n\n第' + str(i + 1) + '个sheet: ' + sheet.title + '->>>')
        for r in range(1, sheet.max_row + 1):
            if sheet.cell(row=r, column=10).value == "否":
                未完成任务计数 = 未完成任务计数 + 1
                未完成人员计数.append(sheet.title)
                未完成人员计数.append((sheet.cell(row=r, column=3).value))
                未完成任务分类计数.append(sheet.title)
                未完成任务.append(sheet.cell(row=r, column=3).value)
            if sheet.cell(row=r, column=10).value == "是":
                已完成任务计数 = 已完成任务计数 + 1
                已完成任务分类计数.append(sheet.title)
                已完成任务.append(sheet.cell(row=r, column=3).value)
    总任务数 = 未完成任务计数 + 已完成任务计数
    每个人完成任务计数 = {}
    每个人未完成任务计数 = {}
    for i in range(len(sheets)):
        sheet = wb.get_sheet_by_name(sheets[i])
        每个人完成任务计数.update({sheets[i]: 已完成任务分类计数.count(sheets[i])})
        每个人未完成任务计数.update({sheets[i]: 未完成任务分类计数.count(sheets[i])})
    for x, y in 每个人完成任务计数.items():  # 通过使用 items() 函数遍历键和值:
        print(x, y)
    for x, y in 每个人未完成任务计数.items():  # 通过使用 items() 函数遍历键和值:
        print(x, y)
    return 总任务数, 已完成任务计数, 未完成任务计数, 未完成任务, 已完成任务
def create_labelframe_style(bootstyle, style):
    global 函数返回数据
    函数返回数据 = datastatistics()
    frame = ttk.Frame(root, padding=5)
    # title
    title = ttk.Label(frame, text='Labelframe', anchor=tk.CENTER)
    title.pack(padx=5, pady=2, fill=tk.BOTH)
    ttk.Separator(frame,bootstyle="danger").pack(padx=5, pady=5, fill=tk.X)  #彩色分割线
    # default
    lbl = ttk.Labelframe(
        master=frame,
        text='工作任务信息统计',
        bootstyle='primary',
        width=150,
        height=75
    )
    lbl.pack(padx=5, pady=5, fill=tk.BOTH)
    ttk.Label(lbl, text="总任务数:").grid(row=1, column=0)
    ttk.Label(lbl, text=函数返回数据[0], bootstyle='success').grid(row=1, column=1)
    ttk.Label(lbl, text="未完成:").grid(row=1, column=2)
    ttk.Label(lbl, text=函数返回数据[2], bootstyle='success').grid(row=1, column=3)
    ttk.Label(lbl, text="已完成:").grid(row=1, column=4)
    ttk.Label(lbl, text=函数返回数据[1], bootstyle='success').grid(row=1, column=5)
    frame1 = ttk.Frame(root, padding=5)
    lbl2 = ttk.Labelframe(master=frame, text='未完成工作任务', bootstyle='primary', width=5, height=500)
    lbl2.pack_propagate(0)
    lbl2.pack(padx=5, pady=5, fill=tk.BOTH)
    scrolledText = ScrolledText(root, width=2, height=220)
    scrolledText = ttk.ScrolledText(lbl2)
    scrolledText.pack(padx=5, pady=5)
    cb_var = []
    global is_check_list
    global aaff
    is_check_list = []
    def truncate_string(text, max_length=15):   #这是一个超过20个字符的示例文本,我们将对其进行截断处理。
        if len(text) > max_length:
            return text[:max_length] + '...'
        else:
            return text.ljust(max_length, '.')
    for i in range(len(函数返回数据[3])):
        truncated_text = truncate_string(str(函数返回数据[3][i]))
        is_check_list.append(ttk.IntVar(value=0))
        bb = 未完成人员计数.index(str(函数返回数据[3][i]))
        cc=(未完成人员计数[bb - 1])
        cb = ttk.Checkbutton(scrolledText, text=wrap(truncated_text), variable=is_check_list[-1],bootstyle='success-toolbutton')  
        scrolledText.window_create('end', window=cb)
        scrolledText.insert('end', '\n')
        cb.bind('<ButtonRelease>', aa)  # 列表框绑定鼠标事件函数

    return frame


def aa(self):  # 读取列表框所选择的内容
    all_select = ""
    for i in range(0, len(is_check_list)):
        if is_check_list[i].get() == 1:
            all_select += 函数返回数据[3][i] + " "
            aa=函数返回数据[3][i]
    if all_select == "":  # 如果没读取到内容就重新取一次,否则就显示已读取成功数据
        for i in range(0, len(is_check_list)):
            if is_check_list[i].get() == 1:
                all_select += 函数返回数据[3][i] + " "
                aa = 函数返回数据[3][i]
    else:
        bb=未完成人员计数.index(aa)
        bbb=未完成人员计数[bb-1]
        messagebox.showinfo("提示", "你所选择的数据是:" + all_select+" [承办人:"+str(bbb)+"]")


def wrap(string, lenght=18):  # 换行显示
    return '\n'.join(textwrap.wrap(string, lenght))

def change_style():
    theme = choice(style.theme_names())
    style.theme_use(theme)

def set_window_opacity(window, opacity):
    """
    设置Tkinter窗口的透明度。
    参数:
        window: Tk() 对象或 Toplevel 对象
        opacity: 0.0 (完全透明) 到 1.0 (完全不透明) 之间的浮点数
    """
    try:
        # 对于Windows系统
        window.attributes('-alpha', opacity)
    except tk.TclError:
        pass

if __name__ == '__main__':
    # create visual widget style tests
    # root = ttk.Window(size=(800,600))
    root = tk.Tk()
    #root = ttk.Window(themename="solar")   #主题
    root.resizable(False, False)  # 窗口不可调整大小。
    root.geometry("+1200+100") #窗口位置
    #set_window_opacity(root, 0.5)  # 设置50%的透明度
    style = ttk.Style()
    ttk.Button(text="Change Theme", command=change_style).grid(row=0, column=0)
    create_labelframe_style('', style).grid(row=0, column=0)
    root.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值