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中使用 Selenium 实现网页截图实例
Jul 18 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
python根据多个文件名批量查找文件
Aug 13 Python
如何基于Python实现自动扫雷
Jan 06 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
对python中各个response的使用说明
Mar 28 Python
Python json读写方式和字典相互转化
Apr 18 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
Python执行时间的几种计算方法
Jul 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
中东人咖啡哲学
2021/03/03 咖啡文化
php公用函数列表[正则]
2007/02/22 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
javascript date格式化示例
2013/09/25 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
python实现员工管理系统
2018/01/11 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Python grpc超时机制代码示例
2020/09/14 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
面向对象编程的优势是什么
2015/12/17 面试题
美容院考勤制度
2014/01/30 职场文书
青年文明号口号
2014/06/17 职场文书
素质教育培训心得体会
2016/01/19 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书