风停了153 2021-06-18 13:39 采纳率: 33.3%
浏览 42
已采纳

帮帮忙吧,哥哥们!实在没办法了

编写程序:读取指EXCEL

students.xlsx

中的学生信息,按python中面向对象的思想在tkinter中实现查询所有学生和按班级查询学生。

  • 写回答

2条回答 默认 最新

  • 关注
    #-*- coding:utf-8 -*-
    from tkinter import *
    import openpyxl
    data = []
    try:
        wb = openpyxl.load_workbook(r"data.xlsx")
        ws = wb.active
        for r in list(ws.rows)[1:]:
            data.append({'sno': r[0].value, 'name': r[1].value, 'age': int(r[2].value), 'score': float(r[3].value)})
    
    
    except IOError:
        pass
    
    top = Tk()
    top.title("成绩管理")
    top.geometry("400x800+400+50")
    
    def createFun():
        addw = Toplevel(top)
        addw.title("添加成绩")
        addw.geometry("200x200+300+300")
        Label(addw, text="学号").grid(row=0, column=0)
        Label(addw, text="姓名").grid(row=1, column=0)
        Label(addw, text="年龄").grid(row=2, column=0)
        Label(addw, text="成绩").grid(row=3, column=0)
        sno = Entry(addw)
        sno.grid(row=0, column=1)
        name = Entry(addw)
        name.grid(row=1, column=1)
        age = Entry(addw)
        age.grid(row=2, column=1)
        score = Entry(addw)
        score.grid(row=3, column=1)
        def cFun():
            data.append({'sno': sno.get(), 'name': name.get(), 'age': int(age.get()), 'score': float(score.get())})
            addw.destroy()
            upde()
        def qFun():
            addw.destroy()
    
        Button(addw, text ="确定", command = cFun).grid(row=4, column=0)
        Button(addw, text ="取消", command = qFun).grid(row=4, column=1)
        addw.transient(top)
        addw.focus()
        addw.grab_set()
        top.wait_window(addw)
    
    
    def quitFun():
        top.quit()
    
    buttbox = Frame(top)
    buttbox.pack( side = TOP, fill = X )
    Button(buttbox, text ="添加", command = createFun).pack(side = LEFT)
    Button(buttbox, text ="退出", command = quitFun).pack(side = LEFT)
    
    fra = Frame(top)
    def upde():
        global fra
        fra.destroy()
        fra = Frame(top)
        fra.pack( side = LEFT, fill = BOTH )
        Label(fra, text="学号").grid(row=0, column=0)
        Label(fra, text="姓名").grid(row=0, column=1)
        Label(fra, text="年龄").grid(row=0, column=2)
        Label(fra, text="成绩").grid(row=0, column=3)
        def delFun(i):
            del data[i]
            upde()
        for i in range(len(data)):
            Label(fra, text=data[i]["sno"]).grid(row=i+1, column=0)
            Label(fra, text=data[i]["name"]).grid(row=i+1, column=1)
            Label(fra, text=data[i]["age"]).grid(row=i+1, column=2)
            Label(fra, text=data[i]["score"]).grid(row=i+1, column=3)
            Button(fra, text ="删除", command = lambda i=i: delFun(i)).grid(row=i+1, column=4)
    
    
    upde()
    top.mainloop()
    # 写入文件
    if len(data)>0:
        wb = openpyxl.Workbook()
        ws=wb.active
        ws.title ="成绩单"
        ws.append(list(data[0].keys()))
        for each in data:
            ws.append(list(each.values()))
        wb.save(r"data.xlsx")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?