工作中测试很多协议,经常需要自己组报文,想做个小工具,带界面,实现封装报文的功能,并生成文件
举个例子:
比如一个故障报文共512个字节,有帧头帧尾ID号等等内容,其中200-208字段是故障代码,一共有30种故障类型,我们目前测试,就得自己组全部512个字节的报文,然后查协议文档,查出某种故障类型的代码,更改200-208字段内容,然后再算CRC,最后封装成特定格式的文件上传系统
我希望能不能做个界面工具,工具配置文件里存着所有故障代码和报文结构,界面上有输入框,输入我需要的故障类型,工具能自动按格式组全报文,最后生成特定格式的文件。
本人目前python入门水平,就是知道基本的语法、类、函数等等这些概念,给我一段代码我对着说明文档大概能看懂,但是自己写不出来的水平,求指导我应该用哪种接口做界面,又大概往哪个方向去学习,可以实现我想要的功能?我搜索python自带有个tkinter,可以用吗?
可以用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")
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!