工作完成情况统计

import tkinter as tk
import ttkbootstrap as ttk
from random import choice
import openpyxl
from tkinter import messagebox  # 弹出提示框
from tkinter.scrolledtext import ScrolledText
def datastatistics():  # excel文件数据统计分析
    wb = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\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=400)
    lbl2.pack_propagate(0)
    lbl2.pack(padx=5, pady=5, fill=tk.BOTH)
    scrolledText = ScrolledText(root, width=2, height=400)
    scrolledText = ttk.ScrolledText(lbl2)
    scrolledText.pack(padx=0, pady=0)
    cb_var = []
    global is_check_list
    global aaff
    is_check_list = []
    v = tk.IntVar()
    my_tuple=()
    def truncate_string(text, max_length=14):  # 这是一个超过20个字符的示例文本,我们将对其进行截断处理。
        if len(text) > max_length:
            return text[:max_length] + '....'
        else:
            return text.ljust(max_length+1," ")

    for i in range(len(函数返回数据[3])):
        truncated_text = truncate_string(str(i)+"."+str(函数返回数据[3][i]))
        is_check_list.append(ttk.IntVar(value=0))
        bb = 未完成人员计数.index(str(函数返回数据[3][i]))
        cc = (未完成人员计数[bb - 1])
        cb = ttk.Radiobutton(scrolledText, text=truncated_text, variable=v,
                             value=i,bootstyle="",command=lambda: printValue(v.get()))
        scrolledText.window_create('end', window=cb)
        scrolledText.insert('end', '\n')
        # cb.bind('<Double-1>', aa)  # 列表框绑定鼠标事件函数
        # ttk.Checkbutton.deselect
        # cb.bind('<Enter>', on_enter)  # 绑定鼠标进入事件


    return frame
def printValue(value):
    print(value)
    all_select = ""
    for i in range(len(函数返回数据[3])):
        if i == value :
            print("正确")
            all_select=str(函数返回数据[3][i])
            aa = 函数返回数据[3][i]
            bb = 未完成人员计数.index(aa)
            bbb = 未完成人员计数[bb - 1]
            messagebox.showinfo("提示", "你所选择的数据是:\n" + all_select + " \n[承办人:" + str(bbb) + "]")
    # open_new_window()

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


def open_new_window():
    # 创建新的窗口
    new_window = tk.Toplevel(root)
    new_window.title('新窗口')
    new_window.geometry('400x300')
    # 将新窗口居中显示
    new_window.attributes('-topmost', True)
    new_window.update_idletasks()
    width = new_window.winfo_width()
    height = new_window.winfo_height()
    x = (new_window.winfo_screenwidth() // 2) - (width // 2)
    y = (new_window.winfo_screenheight() // 2) - (height // 2)
    new_window.geometry('{}x{}+{}+{}'.format(width, height, x, y))
    new_window.attributes('-topmost', False)
    # 在新窗口上添加一个标签
    new_label = tk.Label(new_window, text='任务序号')
    new_label.pack()
    new_label1 = tk.Label(new_window, text='任务名称')
    new_label1.pack()
    new_label2 = tk.Label(new_window, text='任务内容')
    new_label2.pack()
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
    评论
### 回答1: Web开发结算工作统计是指通过一定的方法和工具对Web开发项目进行工作统计,以便于对项目进展和开发人员工作量进行评估和结算的过程。 首先,进行工作统计需要明确统计的对象和指标。对于Web开发项目,可以将工作统计分为技术工作和非技术工作两个方面。技术工作包括需求分析、系统设计、编码实现、测试等,可以根据每个环节的工作量以及项目复杂度进行统计。非技术工作包括会议讨论、文档编写、版本控制等,也需要考虑其工作量。 其次,确定统计方法和工具。常用的统计方法包括直接计算和估算两种。直接计算是指通过记录每个工作环节的实际耗时和人力成本来进行统计。估算则是根据开发人员和项目经验,通过对工作内容的评估和量化来进行统计。对于大型项目,还可以借助项目管理软件或工时管理系统进行结算,通过记录工作日志、项目任务完成情况等来实现工作统计。 最后,利用工作统计结果进行评估和结算。根据工作统计的结果,可以对开发人员的工作效率进行评估,以便为个人绩效考核或付费结算提供依据。同时,工作统计也可以用于项目管理,通过对各个环节的工作量分析,确定资源投入、进度控制等,提高项目管理的效率和准确度。 综上所述,Web开发结算工作统计是一项重要的工作,可以通过明确统计对象和指标、确定统计方法和工具,以及利用统计结果进行评估和结算,来实现对Web开发项目工作量的准确统计和合理结算。 ### 回答2: 在web开发项目中,结算工作量的统计是非常重要的,它可以帮助团队全面了解项目的进度和资源分配情况。以下是一些可行的方法和步骤来完成这个任务。 首先,需要明确每个开发任务的范围和实际工作量。可以根据项目需求和功能要求,将任务细分为不同的模块或功能点,然后分配给开发人员进行开发。这样可以更好地控制工作量和进度。 其次,可以根据任务的复杂程度和预期工作量,对每个任务进行估算。可以建立一个评估模型,根据任务中所需的技术、资源和时间,来评估每个任务的工作量。这可以通过和开发团队的经验和反馈进行不断优化和调整。 接下来,需要建立一个工作统计的框架或工具。可以使用项目管理软件或电子表格来跟踪每个任务的状态、工作量、完成时间等信息。这样可以方便地进行数据的整理和分析。 然后,可以根据任务的完成情况进行工作量的记录和汇总。开发人员可以在完成任务后,填写相关的工作统计表,包括每个任务所花费的时间和资源。这样可以及时掌握每个任务完成情况。 最后,可以定期进行工作量的分析和总结。可以比较预估工作量和实际工作量的差异,找出工作统计中的问题和改进的空间。同时,可以根据工作量的统计结果,对资源进行合理分配,以确保项目的有效进展。 总之,web开发结算工作量的统计是一个重要的任务,可以帮助团队更好地管理和控制项目的进度和资源分配情况。通过合理的估算和统计,可以提高开发效率,确保项目的顺利进行。 ### 回答3: Web开发结算工作统计是指对于完成的Web开发项目进行工作量的统计和结算。在Web开发过程中,涉及到的工作量包括项目规划、需求分析、系统设计、页面编写、前后端开发、数据库设计等。 首先,我们需要对每个开发阶段的工作进行详细的统计。比如,项目规划阶段需要确定项目目标、时间计划、团队组建等,需求分析阶段需要收集和整理用户需求,系统设计阶段需要设计系统的架构和功能模块等。对于每个阶段的工作,我们可以通过工时统计或任务完成情况来评估工作量。 其次,我们还需要统计各个开发任务的工作量。比如,对于页面编写阶段,可以根据页面数量、页面复杂度和所需时间来统计工作量。对于前后端开发阶段,可以根据开发的功能模块数量、复杂度和开发时间来统计工作量。对于数据设计阶段,可以根据数据库的表结构数量、复杂度和设计时间来统计工作量。 最后,我们需要将各个阶段和任务的工作量进行汇总和结算。可以使用Excel或其他工具进行汇总,计算总的工作量和相应的工时。根据工作量的统计结果,可以对开发阶段和任务进行评估,了解开发进度和工作负载的情况。 总结起来,Web开发结算工作统计是对于Web开发过程中各个阶段和任务的工作量进行统计和结算,通过它可以客观地评估开发进度和工作负载情况,帮助项目管理和资源分配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值