Python自动生成代码 - 通过tkinter图形化操作并生成代码框架
- 背景
- 脚本代码
- Demo_CodeGenerator.py
- display.py
- FileHandler.py:
- 脚本运行结果:
- 脚本代码目录
背景
在写代码过程中,如果有 频繁重复性的编码操作 ,或者可以 Reuse 的各类代码,可以通过Python写一个脚本, 自动生成这类代码 ,就不用每次手写、或者copy了。
比如新建固定的代码框架、添加一些既定的软件逻辑,通讯协议、消息模板等等,再编写一套代码时,或者一个Function时,每次使通过脚本一键生成代码,就不需要每次都写一遍了,同时可以把相关软件逻辑放进去,也能避免出错。
脚本代码
Demo_CodeGenerator.py
具体详细代码去掉了,大家想生成什么样的代码就在mycode中append相应的行,然后点开Display输入相关参数,就可以自动生成code文件。
#conding=utf-8
from
FileHandler
import
WritetoFile
import
sys
PwdPath
=
sys
.
argv
[
0
]
class
BuildCode_Dev
:
'Auto Generate code of Device control'
def
__init__
(
self
,
KeyWord
=
'TestDemoCommand'
)
:
self
.
CmdKeyWord
=
KeyWord
def
Generate
(
self
)
:
fileName
=
'Code_Dev.txt'
mycode
=
[
]
#想生成什么样的代码就在mycode中append相应的行,
mycode
.
append
(
'\n---------------------- Demo code Below: ---------------------- '
)
mycode
.
append
(
'\n---------------------- Demo code Below: ---------------------- '
)
mycode
.
append
(
'\n---------------------- Demo code Below: ---------------------- '
)
mycode
.
append
(
'\n***** DemoCode_Get_DataLength() ***** '
)
mycode
.
append
(
'\n***** DemoCode_Set_DataLength() ***** '
)
mycode
.
append
(
'Switch ('
+
self
.
CmdKeyWord
+
'):'
)
mycode
.
append
(
' case('
+
self
.
CmdKeyWord
+
'):'
)
mycode
.
append
(
' break;'
)
WritetoFile
(
fileName
,
mycode
)
print
(
'Code:'
+
self
.
CmdKeyWord
+
' Generator OK!'
)
return
(
mycode
)
if
__name__
==
'__main__'
:
if
(
sys
.
argv
[
1
:
]
==
[
]
)
:
print
(
'Not input parameter , Use Test Data'
)
CmdKeyWord
=
'TestDemoCommand'
else
:
CmdKeyWord
=
sys
.
argv
[
1
]
#code = BuildCode_Dev(CmdKeyWord)
#code.Generate()
#print(PwdPath)
#print(CmdKeyWord)
display.py
主要通过tkinter图形化显示,根据输入参数,点击按钮 生成相应的代码。
# -*- coding: utf-8 -*-
from
tkinter
import
*
from
GatewayControl_CodeGenerator
import
*
from
DeviceControl_CodeGenerator
import
*
def
GWMsg
(
)
:
txt
.
delete
(
1.0
,
END
)
Input
=
str
(
inputData
.
get
(
1.0
,
END
)
)
Cmd_Gw
=
BuildCode_GW
(
Input
)
CodeRst
=
Cmd_Gw
.
Generate
(
)
s
=
'Code_GW.txt Generate Success:\n\n'
txt
.
insert
(
END
,
s
)
txt
.
insert
(
END
,
CodeRst
)
#inputData.delete(0.0, END)
def
DevMsg
(
)
:
txt
.
delete
(
1.0
,
END
)
Input
=
str
(
inputData
.
get
(
1.0
,
END
)
)
Cmd_Dev
=
BuildCode_Dev
(
Input
)
CodeRst
=
Cmd_Dev
.
Generate
(
)
s
=
'Code_Dev.txt Generate Success:\n\n'
txt
.
insert
(
END
,
s
)
txt
.
insert
(
END
,
CodeRst
)
#inputData.delete(0.0, END)
def
clearContent
(
)
:
inputData
.
delete
(
1.0
,
END
)
txt
.
delete
(
1.0
,
END
)
root
=
Tk
(
)
root
.
geometry
(
'1000x600'
)
root
.
title
(
' Code Generator'
)
root
.
config
(
bg
=
'#f0ffff'
)
#Lable
intro
=
Label
(
root
,
text
=
'请在左侧输入消息/命令名字, 然后选择相应按钮生成代码'
,
\
bg
=
'#d3fbfb'
,
\
fg
=
'red'
,
\
font
=
(
'华文新魏'
,
11
)
,
\
width
=
20
,
\
height
=
2
,
\
relief
=
RIDGE
)
intro
.
place
(
relx
=
0.1
,
rely
=
0.1
,
relwidth
=
0.8
,
relheight
=
0.1
)
#Input
inputData
=
Text
(
root
,
font
=
(
''
,
14
)
)
inputData
.
place
(
relx
=
0.1
,
rely
=
0.2
,
relwidth
=
0.3
,
relheight
=
0.6
)
#Output
txt
=
Text
(
root
,
font
=
(
''
,
9
)
)
txt
.
place
(
relx
=
0.6
,
rely
=
0.2
,
relwidth
=
0.3
,
relheight
=
0.6
)
#Button
bt_json2bin
=
Button
(
root
,
text
=
'**Demo Control'
,
command
=
GWMsg
,
fg
=
'blue'
)
bt_json2bin
.
place
(
relx
=
0.4
,
rely
=
0.25
,
relwidth
=
0.2
,
relheight
=
0.1
)
bt_bin2json
=
Button
(
root
,
text
=
'**Demo Control'
,
command
=
DevMsg
,
fg
=
'blue'
)
bt_bin2json
.
place
(
relx
=
0.4
,
rely
=
0.45
,
relwidth
=
0.2
,
relheight
=
0.1
)
bt_clear
=
Button
(
root
,
text
=
'Clear'
,
command
=
clearContent
,
fg
=
'blue'
)
bt_clear
.
place
(
relx
=
0.4
,
rely
=
0.65
,
relwidth
=
0.2
,
relheight
=
0.1
)
intro
=
Label
(
root
,
text
=
'产生的完整代码在 Code_GW.txt或Code_Dev.txt中(当前目录 ), 问题联系人:Howard'
,
\
bg
=
'#d3fbfb'
,
\
fg
=
'red'
,
\
font
=
(
'华文新魏'
,
11
)
,
\
width
=
20
,
\
height
=
2
,
\
relief
=
RIDGE
)
intro
.
place
(
relx
=
0.1
,
rely
=
0.8
,
relwidth
=
0.8
,
relheight
=
0.1
)
root
.
mainloop
(
)
FileHandler.py:
主要是把代码写入文件保存
def
WritetoFile
(
FileName
,
Data
)
:
with
open
(
FileName
,
'w'
)
as
record
:
strr
=
"\n"
content
=
strr
.
join
(
Data
)
record
.
write
(
content
+
'\n'
)
脚本运行结果:
运行display.py, 选择相应按钮后,会调用相应生成代码py文件。
最后可以把这个打包成一个exe,方便使用。
脚本代码目录