子窗口基本完成

This commit is contained in:
vc4
2021-08-24 12:21:17 +08:00
parent 90fb7b17a6
commit abc5c80b76
7 changed files with 185 additions and 32 deletions

View File

@@ -1,17 +0,0 @@
{
"btn-data01": {
"title": "握手包",
"value": "hello",
"hex":0
},
"btn-data02": {
"title": "HEX测试",
"value": "01 02 03 04 05",
"hex":1
},
"btn-data03": {
"title": "中文测试",
"value": "举杯邀明月",
"hex":0
}
}

0
scomm.json → app.ui Executable file → Normal file
View File

View File

48
pack.ui Normal file
View File

@@ -0,0 +1,48 @@
{
"Label":[
{
"name":"label-ptitle",
"text":"数据标题",
"column": 1,
"row": 1
},
{
"name":"label-pempty",
"text":" ",
"column": 8,
"colweight": 1,
"row": 1
}
],
"Entry": {
"name":"entry-pfile",
"bg":"gold",
"width":10,
"column": 2,
"row": 1
},
"Text":{
"name":"text-psetting",
"bg":"#cccccc",
"width":50,
"height":5,
"column": 1,
"columnspan": 10,
"rowweight": 1,
"row": 2
},
"Button":[
{
"name":"btn-pexec",
"text":"执行",
"column": 9,
"row": 3
},
{
"name":"btn-psave",
"text":"保存",
"column": 10,
"row": 3
}
]
}

View File

@@ -241,6 +241,9 @@ class SerComm():
class TopWin(): class TopWin():
def __init__(self, root): def __init__(self, root):
self.root = root self.root = root
self.WinData = None
self.WinPack = None
self.WinUnpack = None
def set_send_data(self, btn): def set_send_data(self, btn):
_cfg = self.root.usercfg.get(btn, {}) _cfg = self.root.usercfg.get(btn, {})
if _cfg: if _cfg:
@@ -248,33 +251,71 @@ class TopWin():
self.root.get('entry-sendText').var.set(val) self.root.get('entry-sendText').var.set(val)
self.root.get('ckbtn-shex').var.set(_cfg.get('hex') and 1 or 0) self.root.get('ckbtn-shex').var.set(_cfg.get('hex') and 1 or 0)
self.root.get('btn-send').invoke() self.root.get('btn-send').invoke()
def set_pack(self, btn):
pass
def set_unpack(self, btn):
pass
def save_cfg(self, btn, dat):
with open('usercfg.json', 'wb+') as f:
self.root.usercfg[btn] = dat
encoding = self.root.get('entry-encoding').var.get()
f.write(json.dumps(self.root.usercfg,indent=4,sort_keys=True).encode(encoding,'ignore'))
def win_data(self, event): def win_data(self, event):
def _save_dfile(): def _save(w):
pass dat = {'title':self.root.get('entry-dfile').var.get()}
self.root.toplevel('data.json', title='预置数据').configure(bg='#e8e8e8') dat['value'] = self.root.get('text-dsetting').get('1.0','end -1 chars')
dat['hex'] = self.root.get('ckbtn-dhex').var.get() and 1 or 0
self.save_cfg(w, dat)
self.WinData.destroy()
if self.WinData: return
self.WinData = self.root.toplevel('data.ui', title='预置数据')
self.WinData.configure(bg='#e8e8e8')
btn = event.widget._name btn = event.widget._name
_cfg = self.root.usercfg.get(btn, {}) _cfg = self.root.usercfg.get(btn, {})
self.root.entry('entry-dfile').set(_cfg.get('title', btn)) self.root.entry('entry-dfile').set(_cfg.get('title', btn))
self.root.get('text-dsetting').insert('end', _cfg.get('value','')) self.root.get('text-dsetting').insert('end', _cfg.get('value',''))
self.root.checkbox('ckbtn-dhex').set(_cfg.get('hex') and 1 or 0) self.root.checkbox('ckbtn-dhex').set(_cfg.get('hex') and 1 or 0)
self.root.button('btn-dsave', cmd=_save_dfile, focus=True) self.root.button('btn-dsave', cmd=lambda x=btn:_save(x), focus=True)
self.root.button('btn-dsend', cmd=lambda x=btn:self.set_send_data(x)) self.root.button('btn-dsend', cmd=lambda x=btn:self.set_send_data(x))
def win_pack(self, btn): def win_pack(self, event):
pass def _save(w):
#root.toplevel('pack.json', title='组帧脚本').configure(bg='#e8e8e8') dat = {'title':self.root.get('entry-pfile').var.get()}
def win_unpack(self, btn): dat['value'] = self.root.get('text-psetting').get('1.0','end -1 chars')
pass self.save_cfg(w,dat)
#root.toplevel('unpack.json', title='解析脚本').configure(bg='#e8e8e8') self.WinPack.destroy()
if self.WinPack: return
self.WinPack = self.root.toplevel('pack.ui', title='组帧脚本')
self.WinPack.configure(bg='#e8e8e8')
btn = event.widget._name
_cfg = self.root.usercfg.get(btn, {})
self.root.entry('entry-pfile').set(_cfg.get('title', btn))
self.root.get('text-psetting').insert('end', _cfg.get('value',''))
self.root.button('btn-psave', cmd=lambda x=btn:_save(x), focus=True)
self.root.button('btn-pexec', cmd=lambda x=btn:self.set_pack(x))
def win_unpack(self, event):
def _save(w):
dat = {'title':self.root.get('entry-ufile').var.get()}
dat['value'] = self.root.get('text-usetting').get('1.0','end -1 chars')
self.save_cfg(w,dat)
self.WinUnpack.destroy()
if self.WinUnpack: return
self.WinUnpack = self.root.toplevel('unpack.ui', title='解析脚本')
self.WinUnpack.configure(bg='#e8e8e8')
btn = event.widget._name
_cfg = self.root.usercfg.get(btn, {})
self.root.entry('entry-ufile').set(_cfg.get('title', btn))
self.root.get('text-usetting').insert('end', _cfg.get('value',''))
self.root.button('btn-usave', cmd=lambda x=btn:_save(x), focus=True)
self.root.button('btn-uexec', cmd=lambda x=btn:self.set_unpack(x))
if __name__ == '__main__': if __name__ == '__main__':
tkinter.ScrolledText = tkinter.scrolledtext.ScrolledText tkinter.ScrolledText = tkinter.scrolledtext.ScrolledText
root = tkgen.gengui.TkJson('scomm.json', title='scomm串口调试助手') root = tkgen.gengui.TkJson('app.ui', title='scomm串口调试助手')
comm = SerComm(root) comm = SerComm(root)
wm = TopWin(root) wm = TopWin(root)
# 读取用户数据文件 # 读取用户数据文件
cfg_file = 'app.json' root.usercfg = json.load(open('usercfg.json')) if os.path.isfile('usercfg.json') else {}
root.usercfg = json.load(open(cfg_file)) if os.path.isfile(cfg_file) else {}
# 预置数据回调函数 # 预置数据回调函数
for i in range(10): for i in range(10):
name = 'btn-data%02d'%(i+1) name = 'btn-data%02d'%(i+1)
@@ -293,7 +334,9 @@ if __name__ == '__main__':
name = 'btn-pack%02d'%(i+1) name = 'btn-pack%02d'%(i+1)
try: try:
btn = root.get(name) btn = root.get(name)
root.button(name, lambda x=name: wm.win_pack(root,x)) root.button(name, lambda x=name: wm.set_pack(x))
btn.bind('<Button-2>', wm.win_pack)
btn.bind('<Button-3>', wm.win_pack)
_cfg = root.usercfg.get(name) _cfg = root.usercfg.get(name)
if _cfg and btn: if _cfg and btn:
btn.config(text=_cfg.get('title',name)) btn.config(text=_cfg.get('title',name))
@@ -304,7 +347,9 @@ if __name__ == '__main__':
name = 'btn-unpack%02d'%(i+1) name = 'btn-unpack%02d'%(i+1)
try: try:
btn = root.get(name) btn = root.get(name)
root.button(name, lambda x=name: wm.win_unpack(root,x)) root.button(name, lambda x=name: wm.set_unpack(x))
btn.bind('<Button-2>', wm.win_unpack)
btn.bind('<Button-3>', wm.win_unpack)
_cfg = root.usercfg.get(name) _cfg = root.usercfg.get(name)
if _cfg and btn: if _cfg and btn:
btn.config(text=_cfg.get('title',name)) btn.config(text=_cfg.get('title',name))

48
unpack.ui Normal file
View File

@@ -0,0 +1,48 @@
{
"Label":[
{
"name":"label-utitle",
"text":"数据标题",
"column": 1,
"row": 1
},
{
"name":"label-uempty",
"text":" ",
"column": 8,
"colweight": 1,
"row": 1
}
],
"Entry": {
"name":"entry-ufile",
"bg":"gold",
"width":10,
"column": 2,
"row": 1
},
"Text":{
"name":"text-usetting",
"bg":"#cccccc",
"width":50,
"height":5,
"column": 1,
"columnspan": 10,
"rowweight": 1,
"row": 2
},
"Button":[
{
"name":"btn-uexec",
"text":"执行",
"column": 9,
"row": 3
},
{
"name":"btn-usave",
"text":"保存",
"column": 10,
"row": 3
}
]
}

29
usercfg.json Normal file
View File

@@ -0,0 +1,29 @@
{
"btn-data01": {
"hex": 0,
"title": "\u63e1\u624b\u5305",
"value": "hello"
},
"btn-data02": {
"hex": 1,
"title": "HEX\u6d4b\u8bd5",
"value": "01 02 03 04 05"
},
"btn-data03": {
"hex": 0,
"title": "\u4e2d\u6587\u6d4b\u8bd5",
"value": "\u4e3e\u676f\u9080\u660e\u6708"
},
"btn-pack01": {
"title": "btn-pack01",
"value": ""
},
"btn-pack03": {
"title": "btn-pack03",
"value": ""
},
"btn-unpack01": {
"title": "btn-unpack01",
"value": ""
}
}