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爬虫爬验证码实现功能详解
Apr 14 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
Python 列表理解及使用方法
Oct 27 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
python批量爬取下载抖音视频
Jun 17 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
Python基于gevent实现高并发代码实例
May 15 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
字典算法实现及操作 --python(实用)
Mar 31 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 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/11/27 PHP
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
chrome原生方法之数组
2011/11/30 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
Python深入学习之装饰器
2014/08/31 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
应届生会计求职信
2013/11/11 职场文书
自主招生自荐书
2013/11/29 职场文书
一份创业计划书范文
2014/02/08 职场文书
某某同志考察材料
2014/05/28 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
涨价通知怎么写
2015/04/23 职场文书
撤诉申请怎么写
2015/05/19 职场文书
《颐和园》教学反思
2016/02/19 职场文书
nginx 配置缓存
2022/05/11 Servers