adagjhlplmn 2022-02-18 22:23 采纳率: 80%
浏览 42
已结题

新入门,想学着用python做个带界面的小工具,主要组报文并生成文件用,求指导应该用哪种接口或者库?

工作中测试很多协议,经常需要自己组报文,想做个小工具,带界面,实现封装报文的功能,并生成文件
举个例子:
比如一个故障报文共512个字节,有帧头帧尾ID号等等内容,其中200-208字段是故障代码,一共有30种故障类型,我们目前测试,就得自己组全部512个字节的报文,然后查协议文档,查出某种故障类型的代码,更改200-208字段内容,然后再算CRC,最后封装成特定格式的文件上传系统

我希望能不能做个界面工具,工具配置文件里存着所有故障代码和报文结构,界面上有输入框,输入我需要的故障类型,工具能自动按格式组全报文,最后生成特定格式的文件。
本人目前python入门水平,就是知道基本的语法、类、函数等等这些概念,给我一段代码我对着说明文档大概能看懂,但是自己写不出来的水平,求指导我应该用哪种接口做界面,又大概往哪个方向去学习,可以实现我想要的功能?我搜索python自带有个tkinter,可以用吗?

  • 写回答

2条回答 默认 最新

  • 关注

    可以用tkinter
    参考下这个
    你题目的解答代码如下:

    #-*- 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")
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月24日
  • 创建了问题 2月18日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度