整体思想:
完全按照自己的想法来写的,首先写模板文件,然后打开模板文件,对模板进行字符串格式化处理,最后再将格式化后的字符串保存到新的文件里面。如有更好的想法,欢迎交流。
将相似度很高的代码写模板文件(widget_template.txt):
# -*- coding: UTF-8 -*- #!/usr/bin/env python #------------------------------------------------------------------------------- # Name: auto # Purpose: # # Author: Yang # # Created: 13/08/2015 # Copyright: (c) Yang 2015 # Licence: <your licence> #------------------------------------------------------------------------------- from PyQt4 import QtGui,QtCore class %(class_name)s(QtGui.QWidget): def __init__(self, parent=None): super(%(class_name)s, self).__init__(parent) self.items = parent.items if parent else {} self.__init_datas() self.__create_items() self.__set_events() ## self.setModal(True) self.setWindowTitle(u"%(class_title)s") ## self.setWindowFlags(QtCore.Qt.Dialog|QtCore.Qt.WindowCloseButtonHint) self.trans = {"window_title":"%(class_trans)s"} self.items["%(class_prefix)s_ui"] = self self.__trans_items() def __init_datas(self): self.data = {} self.data["mc_id"] = None self.data["snaddr"] = "FF" self.data["spaddr"] = "FF" self.data["rcaddr"] = "FFFF" self.data["operation"] = None self.data["mode"] = "save" self.data["argvs"] = [] def __create_items(self): pass def __set_events(self): pass def __set_ui_config(self): """将数据表示到画面""" pass def __get_ui_config(self): """将画面数据保存到结构体""" pass def __trans_items(self): if self.parent() is None: return self.parent().trans_items("%(class_prefix)s") def __send_request(self, data, show_msg=0, msg_revc=None): if self.parent() is None: return {} if data["mc_id"] is None: return {} return self.parent().send_request(data, show_msg, msg_revc) def showEvent(self, event): super(%(class_name)s, self).showEvent(event) def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Escape: self.close() super(%(class_name)s, self).keyPressEvent(event) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) dialog = %(class_name)s() dialog.show() sys.exit(app.exec_())
这个是配置文件(config.json),主要是为了方便模板文件修改之后,不用修改自动生成文件的代码。
{ "template_file":"widget_template.txt", "file_name":"SplashSettings.py", "class_name":"SplashSettings", "class_trans":"splash_setting", "class_title":"开机画面设置", "class_prefix":"sd_ss" }
下面是自动生成文件的代码(widget_robot.py)
# -*- coding: UTF-8 -*- #!/usr/bin/env python #------------------------------------------------------------------------------- # Name: UI自动生成工具 # Purpose: # # Author: Yang # # Created: 13/08/2015 # Copyright: (c) Yang 2015 # Licence: <your licence> #------------------------------------------------------------------------------- import json import codecs def main(): # read config config = {} with codecs.open("config.json","rb","UTF-8") as f: config = json.loads(f.read()) if not config: return # read template file s = "" template = config.get("template_file", "widget_template.txt") with codecs.open(template, "rb", "UTF-8") as f: s = f.read() if not s: return s = s % config # save to file fn = config["file_name"] with codecs.open(fn, "wb", "UTF-8") as f: f.write(s) f.flush() if __name__ == ‘__main__‘: try: main() except Exception,ex: print(ex)
总结:
其实很简单的,只要是写过代码的人都能写出来。关键看你想不想去写。
第一次写笔记。祝我在程序员的道路上越走越远。
时间: 2024-10-19 03:22:11