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 30 Python
Python Property属性的2种用法
Jun 21 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
Python异常处理操作实例详解
Aug 28 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
python实现静态web服务器
Sep 03 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
keras得到每层的系数方式
Jun 15 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
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
PHP微信红包API接口
2015/12/05 PHP
Prototype Date对象 学习
2009/07/12 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
小程序实现分类页
2019/07/12 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
python实现爬山算法的思路详解
2019/04/09 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
医生自荐信
2013/10/11 职场文书
化工专业推荐信范文
2013/11/28 职场文书
事业单位接收函
2014/01/10 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
先进集体获奖感言
2014/02/13 职场文书
消防安全承诺书
2014/05/22 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
2014年终个人总结报告
2015/03/09 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
 Python 中 logging 模块使用详情
2022/03/03 Python