Python自动生成代码 使用tkinter图形化操作并生成代码框架


Posted in Python onSeptember 18, 2019

背景

在写代码过程中,如果有频繁重复性的编码操作,或者可以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,方便使用。

Python自动生成代码 使用tkinter图形化操作并生成代码框架

脚本代码目录

Python自动生成代码 使用tkinter图形化操作并生成代码框架

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编程把二叉树打印成多行代码
Jan 04 Python
python学生管理系统代码实现
Apr 05 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
python3正则提取字符串里的中文实例
Jan 31 Python
详解python中的time和datetime的常用方法
Jul 08 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
通过python检测字符串的字母
Feb 18 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python 实现的车牌识别项目
Jan 25 Python
Python 元组操作总结
Sep 18 #Python
python sorted函数的小练习及解答
Sep 18 #Python
python 默认参数相关知识详解
Sep 18 #Python
python连接PostgreSQL数据库的过程详解
Sep 18 #Python
Python传递参数的多种方式(小结)
Sep 18 #Python
余弦相似性计算及python代码实现过程解析
Sep 18 #Python
python之yield和Generator深入解析
Sep 18 #Python
You might like
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php连接mysql数据库
2017/03/21 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
Vue中props的详解
2019/05/16 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
python实时监控cpu小工具
2018/06/21 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
python 实现性别识别
2020/11/21 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
银行先进个人总结
2015/02/15 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
导游词之江南周庄
2019/12/06 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
Python学习之异常中的finally使用详解
2022/03/16 Python
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android