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使用socket进行简单网络连接的方法
Apr 29 Python
Django中更新多个对象数据与删除对象的方法
Jul 17 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
Python文件读写w+和r+区别解析
Mar 26 Python
Python生成随机验证码代码实例解析
Jun 09 Python
python解释器安装教程的方法步骤
Jul 02 Python
Python如何给函数库增加日志功能
Aug 04 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
python实现三阶魔方还原的示例代码
Apr 28 Python
python基础之模块的导入
Oct 24 Python
python高温预警数据获取实例
Jul 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在线书签系统分享
2016/01/04 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python3.6编写的单元测试示例
2019/08/17 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
求职简历自荐信
2013/10/20 职场文书
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
三下乡活动方案
2014/01/31 职场文书
就业意向书范文
2014/04/01 职场文书
人力资源管理求职信
2014/08/07 职场文书
作风建设年活动总结
2014/08/27 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
以下牛机,你有几个
2022/04/05 无线电