操作系统:win10(64位)
python版本:3.7
IDE:PyCharm 2018.1.2 x64
引用模块:tkinter
tkinter 模块是 Python 的标准 Tk GUI 工具包的接口 。
import tkinter as tk
root = tk.Tk()
root.title("检验和计算工具")#设置窗口标题
root.geometry("600x200") #设置窗口大小,注意中间是小写字母x
Label组件用于在窗体显示字符,参数text表示显示的字符串,font用于设置字体和大小;
place用于指定字符在窗体显示的具体位置
stringvar属于tkinter的对象,用于跟踪输入数据(以字符串形式跟踪)
Entry用于创建输入文本框,参数textvariable用于获取输入数据,font用于设置字体和大小
tk.Label(root, text="输入数据(Hex):", font=("宋体",12)).place(x=10,y=50)#输入数据标签
var_data = tk.StringVar()
rr=tk.Entry(root,textvariable = var_data,font=("宋体",12)).place(x=120,y=50,width=400)
Button组件用于在窗体生成按钮,参数text显示按钮的文本描述,font用于字体设置,width和height用于设置按钮的宽和高,command用于引用当按下按钮后的操作函数,对于本文就是校验和计算函数
tk.Button(root, text="校验和计算", font=('Arial', 12), width=10, height=1, command=CheckSum).place(x=250,y=150)
输入的数据为一字节十六进制数,并用空格隔开,使用entry输入框获取的数据为字符串类型,需要剔除多余的0x字符(如果有的话);
算法需要根据空格来做数据的间隔提取,如果是空格,空格前两个字符为十六进制数的字符串形式,转换为十六进制数后就可以进行累加和了;需要注意的是:最后一个字符,往往不是空格,需要把最后两个字符提取为十六进制数进行累加和计算。
def CheckSum():
data = var_data.get()#获取输入的数据,为字符串
data = data.replace('0x','')#去掉多余的0x字符
z = 0
count = 0
isnum = False
for i in data:
if i.isspace():
if isnum == True:
y = data[count - 2:count]
z = (z + int(y, 16)) & 0xff
isnum=False
else:
isnum=True
count = count + 1
if count == len(data):
if isnum == True:
y = data[count - 2:count]
z = (z + int(y, 16)) & 0xff
tk.Label(root, text=hex(z), bg = "green",font=("宋体", 12)).place(x=100, y=120) # 校验和标签