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命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
Python之批量创建文件的实例讲解
May 10 Python
对命令行模式与python交互模式介绍
May 12 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
wxPython实现分隔窗口
Nov 19 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 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
提升PHP执行速度全攻略(下)
2006/10/09 PHP
一个好用的分页函数
2006/11/16 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
树结构之JavaScript
2017/01/24 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
Python 实现随机数详解及实例代码
2017/04/15 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
python 实现表情识别
2020/11/21 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
大学生个人简历中的自我评价
2013/12/27 职场文书
《去年的树》教学反思
2014/04/11 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
公司员工手册范本
2015/05/14 职场文书
思品教学工作总结
2015/08/10 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript