tkinter
tkinter是python自带的GUI库,使用tkinter可以开发出漂亮的界面。
示例1
import tkinter as tk
wind = tk.Tk()
wind.title("tk 小程序")
wind.geometry('300x200+500+300')
# list
ll = ["C", "C++", "Java", "Python", "Lua", "R"]
lbox1 = tk.Listbox(wind)
for item in ll:
lbox1.insert(0, item)
lbox1.pack()
wind.mainloop()
应用开发
Logic逻辑分析仪I2C解析器
import tkinter as tk
from tkinter.filedialog import askopenfilename, asksaveasfilename
import csv
import time
import os
def Saleae_Logic_I2C_csv_parse(csv_fname):
'''
逻辑分析仪,I2C导出的数据csv格式。
可以通过该脚本直接查看收发内容
'''
ss = ''
with open(csv_fname, newline='') as csvfile:
reader = csv.reader(csvfile)
Packet_ID = -1
for row in reader:
print('<{},{}>'.format(Packet_ID,row[1]))
if not row[1].isdigit():
if row[1] == '':
Packet_ID += 1
continue
if row[1] != str(Packet_ID):
# print('')
ss += "\n"
Packet_ID += 1
if row[4] == 'Write':
# print('-> ', end='')
ss += "-> "
elif row[4] == 'Read':
# print('<- ', end='')
ss += "<- "
else:
pass
data = row[3]
# print(data[2:], end=' ')
ss += data[2:] + ' '
return ss
def open_file():
file_path = askopenfilename(filetypes=[("文本文件", ".csv"), ("全部", ".*")])
path.set(file_path)
cmd.set('请点击"开始转换"')
def translate(save_mode=0):
# 将输出文件放在和源文件同一个目录下
file_name = path.get()
# 开始转换
ss = Saleae_Logic_I2C_csv_parse(file_name)
if save_mode == 0:
file_output = file_name.rsplit('.', maxsplit=1)
# 获取当前时间
now = time.strftime("_%Y%m%d_%H%M%S")
file_output = file_output[0] + now + '.txt'
elif save_mode == 1:
# 通过对话框打开文件
file_output = asksaveasfilename(
defaultextension='.txt', filetypes=[("文本文件", ".txt")],
initialfile='saleae_logic_i2c.txt')
else:
return False
with open(file_output, 'w') as ff:
ff.write(ss)
ff.close()
cmd.set('转换完成')
# tk实例化
root = tk.Tk()
path = tk.StringVar()
cmd = tk.StringVar()
# 添加控件
root.title('Saleae辅助工具 v1.0')
# 如果打包程序,这个不太方便
ico = "./res/apaki.ico"
if os.path.exists(ico):
root.iconbitmap(default=ico)
root.resizable(False, False) # 大小不可变
cmd.set('请选择文件...')
# 第一行
tk.Entry(root, textvariable=path).grid(row=0, column=0, columnspan=2, ipadx=50)
tk.Button(root, text="选择文件", command=open_file).grid(row=0, column=2)
# 第二行
tk.Label(root, textvariable=cmd).grid(row=1, column=0, columnspan=2, ipadx=50)
tk.Button(root, text="开始转换", command=lambda: translate(1)).grid(row=1, column=2)
# tk运行
root.mainloop()