diff --git a/app.json b/app.json deleted file mode 100644 index a01cb0b..0000000 --- a/app.json +++ /dev/null @@ -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 - } -} diff --git a/scomm.json b/app.ui old mode 100755 new mode 100644 similarity index 100% rename from scomm.json rename to app.ui diff --git a/data.json b/data.ui similarity index 100% rename from data.json rename to data.ui diff --git a/pack.ui b/pack.ui new file mode 100644 index 0000000..63b3e3c --- /dev/null +++ b/pack.ui @@ -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 + } + ] +} diff --git a/scomm.py b/scomm.py index 127dcab..cc0b828 100755 --- a/scomm.py +++ b/scomm.py @@ -241,6 +241,9 @@ class SerComm(): class TopWin(): def __init__(self, root): self.root = root + self.WinData = None + self.WinPack = None + self.WinUnpack = None def set_send_data(self, btn): _cfg = self.root.usercfg.get(btn, {}) if _cfg: @@ -248,33 +251,71 @@ class TopWin(): 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('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 _save_dfile(): - pass - self.root.toplevel('data.json', title='预置数据').configure(bg='#e8e8e8') + def _save(w): + dat = {'title':self.root.get('entry-dfile').var.get()} + 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 _cfg = self.root.usercfg.get(btn, {}) self.root.entry('entry-dfile').set(_cfg.get('title', btn)) 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.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)) - def win_pack(self, btn): - pass - #root.toplevel('pack.json', title='组帧脚本').configure(bg='#e8e8e8') - def win_unpack(self, btn): - pass - #root.toplevel('unpack.json', title='解析脚本').configure(bg='#e8e8e8') + def win_pack(self, event): + def _save(w): + dat = {'title':self.root.get('entry-pfile').var.get()} + dat['value'] = self.root.get('text-psetting').get('1.0','end -1 chars') + self.save_cfg(w,dat) + 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__': tkinter.ScrolledText = tkinter.scrolledtext.ScrolledText - root = tkgen.gengui.TkJson('scomm.json', title='scomm串口调试助手') + root = tkgen.gengui.TkJson('app.ui', title='scomm串口调试助手') comm = SerComm(root) wm = TopWin(root) # 读取用户数据文件 - cfg_file = 'app.json' - root.usercfg = json.load(open(cfg_file)) if os.path.isfile(cfg_file) else {} + root.usercfg = json.load(open('usercfg.json')) if os.path.isfile('usercfg.json') else {} # 预置数据回调函数 for i in range(10): name = 'btn-data%02d'%(i+1) @@ -293,7 +334,9 @@ if __name__ == '__main__': name = 'btn-pack%02d'%(i+1) try: 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('', wm.win_pack) + btn.bind('', wm.win_pack) _cfg = root.usercfg.get(name) if _cfg and btn: btn.config(text=_cfg.get('title',name)) @@ -304,7 +347,9 @@ if __name__ == '__main__': name = 'btn-unpack%02d'%(i+1) try: 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('', wm.win_unpack) + btn.bind('', wm.win_unpack) _cfg = root.usercfg.get(name) if _cfg and btn: btn.config(text=_cfg.get('title',name)) diff --git a/unpack.ui b/unpack.ui new file mode 100644 index 0000000..6725250 --- /dev/null +++ b/unpack.ui @@ -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 + } + ] +} diff --git a/usercfg.json b/usercfg.json new file mode 100644 index 0000000..87b37e0 --- /dev/null +++ b/usercfg.json @@ -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": "" + } +} \ No newline at end of file