当前位置:网站首页>工作任务统计
工作任务统计
2022-08-09 12:11:00 【Newnotes】
机缘
提示:可以和大家分享最初成为创作者的初心
例如:
- 平时利用EXCEL文件来记录工作任务安排,但每次都而要打开文件进行查看,感觉不直观与方便,便利用python 将excel文件内容读取出来进行统计显示。每次开机自动启动,看着比较方便。
- 里面的代码都是从网络上搜索到的个个片段,没有啥效率可读性,目的就是解决问题。
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('工作任务统计.xlsx')
# 获取workbook中所有的表格
# sheets = wb.get_sheet_names()
sheets = wb.sheetnames
# print(sheets)
# 循环遍历所有sheet
未完成任务 = []
已完成任务 = []
未完成任务计数 = 0
未完成任务分类计数 = []
已完成任务计数 = 0
已完成任务分类计数 = []
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
# 未完成任务分类计数[sheet.title] =未完成任务计数+1
未完成任务分类计数.append(sheet.title)
未完成任务.append(sheet.cell(row=r, column=3).value)
# 未完成任务分类计数.append(未完成任务计数+1)
if sheet.cell(row=r, column=10).value == "是":
已完成任务计数 = 已完成任务计数 + 1
已完成任务分类计数.append(sheet.title)
已完成任务.append(sheet.cell(row=r, column=3).value)
总任务数 = 未完成任务计数 + 已完成任务计数
print("总任务数: " + str(总任务数))
print(未完成任务)
print(已完成任务)
# print(未完成任务计数)
# print(已完成任务计数)
每个人完成任务计数 = {}
每个人未完成任务计数 = {}
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).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="总任务数:").pack(side=LEFT, anchor='nw')
ttk.Label(lbl, text=函数返回数据[0], bootstyle='success').pack(side=LEFT, anchor='nw')
ttk.Label(lbl, text="未完成任务数:").pack(side=LEFT, anchor='nw')
ttk.Label(lbl, text=函数返回数据[2], bootstyle='success').pack(side=LEFT, anchor='nw')
ttk.Label(lbl, text="已完成任务数:").pack(side=LEFT, anchor='nw')
ttk.Label(lbl, text=函数返回数据[1], bootstyle='success').pack(side=LEFT, anchor='nw')
frame1 = ttk.Frame(root, padding=5)
# title
title = ttk.Label(frame1, text='Labelframe1', anchor=tk.CENTER)
title.pack(padx=5, pady=2, fill=tk.BOTH)
ttk.Separator(frame1).pack(padx=5, pady=5, fill=tk.X)
# default secondLine.pack_propagate(0)
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)
print(len(函数返回数据[3]))
# for ss in range(len(函数返回数据[3])):
# ss=ttk.Label(lbl2, text=wrap(str(函数返回数据[3][ss])), bootstyle='success')
# ss.pack(padx=5, pady=5, fill=tk.BOTH)
scrolledText = ScrolledText(root, width=5, height=10)
scrolledText=ttk.ScrolledText(lbl2)
scrolledText.pack(padx=5, pady=5)
cb_var = []
global is_check_list
global aaff
is_check_list=[]
for i in range(len(函数返回数据[3])):
is_check_list.append(ttk.IntVar(value=0))
cb = ttk.Checkbutton(scrolledText, text=wrap(str(函数返回数据[3][i])),variable = is_check_list[-1],bootstyle='success') #tk.Checkbutton
scrolledText.window_create('end', window=cb)
scrolledText.insert('end', '\n')
scrolledText.insert('end', '────────────────────────')
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] + " "
if all_select=="": #如果没读取到内容就重新取一次,否则就显示已读取成功数据
for i in range(0, len(is_check_list)):
if is_check_list[i].get() == 1:
all_select += 函数返回数据[3][i] + " "
else:
messagebox.showinfo("提示", "你所选择的数据是:" + all_select)
def wrap(string, lenght=18): #换行显示
return '\n'.join(textwrap.wrap(string, lenght))
def change_style():
theme = choice(style.theme_names())
style.theme_use(theme)
if __name__ == '__main__':
# create visual widget style tests
# root = ttk.Window(size=(800,600))
root = tk.Tk()
root.resizable(False, False) #窗口不可调整大小。
style = ttk.Style()
ttk.Button(text="Change Theme", command=change_style).pack(padx=10, pady=10)
create_labelframe_style('', style).pack(side=tk.LEFT)
root.mainloop()
边栏推荐
- The new features of ABP 6.0.0 - rc. 1
- 【无标题】
- Intranet penetration tool ngrok usage tutorial
- Scala Advanced (7): Collection Content Summary (Part 1)
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
- 手写大根堆
- 用皮肤“听”音乐,网友戴上这款装备听音乐会:仿佛住在钢琴里
- WebView injects Js code to realize large image adaptive screen click image preview details
- 位图与位运算
- Flutter入门进阶之旅(七)GestureDetector
猜你喜欢
AI篮球裁判火了,走步算得特别准,就问哈登慌不慌
Byte Qiu Zhao confused me on both sides, and asked me under what circumstances would the SYN message be discarded?
曲鸟全栈UI自动化教学(八):框架代码讲解和进一步优化
数据挖掘-05
WeChat side: what is consistent hashing, usage scenarios, and what problems does it solve?
合并两个有序列表
ABAP 报表中如何以二进制方式上传本地文件试读版
脱光衣服待着就能减肥,当真有这好事?
Common gadgets of Shell (sort, uniq, tr, cut)
win10编译x264库(也有生成好的lib文件)
随机推荐
#Internet of Things essay#Xiaoxiong pie equipment development actual combat
基于CAP组件实现补偿事务与幂等性保障
redis库没法引入
Flutter入门进阶之旅(八)Button Widget
读写分离后,性能居然提升100%了呀
Shell正则表达式,三剑客之grep命令
问题来了:4GB物理内存的机器上申请8G内存能成功吗?
Scala Advanced (7): Collection Content Summary (Part 1)
How should the acceptance criteria for R&D requirements be written?| Agile Practices
Flutter入门进阶之旅(一)-初识Flutter
ABP 6.0.0-rc.1的新特性
8、IDEA提交代码出现: Fetch failed fatal: Could not read from remote repository
glide工具类的简单封装
Nature:猪死亡1小时后,器官再次运转
听声辨物,这是AI视觉该干的???|ECCV 2022
Here comes the question: Can I successfully apply for 8G memory on a machine with 4GB physical memory?
ThreadLocal的简单理解
Apexsqlrecover cannot connect to database
鹅厂机器狗花式穿越10m梅花桩:前空翻、单桩跳、起身作揖...全程不打一个趔趄...
微信一面:一致性哈希是什么,使用场景,解决了什么问题?