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之不要红头文件(2)
Sep 28 Python
Python下载指定页面上图片的方法
May 12 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
numpy数组拼接简单示例
Dec 15 Python
教你使用python画一朵花送女朋友
Mar 29 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python机器学习实现决策树
Nov 11 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
详解Anaconda 的安装教程
Sep 23 Python
python中Mako库实例用法
Dec 31 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
详解redux异步操作实践
2018/08/15 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
js实现简单页面全屏
2019/09/17 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
详解python变量与数据类型
2020/08/25 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
群众路线领导对照材料
2014/08/23 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
诚信承诺书
2015/01/19 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
高质量“欢迎词”
2019/04/03 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis