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多线程编程(一):threading模块综述
Apr 05 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
python实现BackPropagation算法
Dec 14 Python
对Python中9种生成新对象的方法总结
May 23 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
如何基于python生成list的所有的子集
Nov 11 Python
python实现电子词典
Mar 03 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 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/25 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php 使用array函数实现分页
2015/02/13 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
Javascript调试工具(下载)
2007/01/09 Javascript
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python图片验证码生成代码
2016/07/02 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python实现C4.5决策树算法
2018/08/29 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
教育科研先进个人材料
2014/01/26 职场文书
学生会主席事迹材料
2014/01/28 职场文书
2014组织生活会方案
2014/05/19 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android