子窗口基本完成
This commit is contained in:
17
app.json
17
app.json
@@ -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
0
scomm.json → app.ui
Executable file → Normal file
48
pack.ui
Normal file
48
pack.ui
Normal 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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
75
scomm.py
75
scomm.py
@@ -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
48
unpack.ui
Normal 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
29
usercfg.json
Normal 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": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user