将QtDesigner的ui文件转成可执行的python代码

其实自己只是想把pyuic4转成的python代码加上几行让其生成之后可以直接运行查看效果。

但是这么个简单的任务我居然花了几乎一天的时间,实在是曲妄了 python 简洁 和高效 ……

 

我企图加上"if __name__ == "__main__":"这样的语句想在pyuic4转换文件之后直接运行看到界面效果,这样直接专注控制逻辑的代码,因为都是同一样的格式和内容自然想本身作为一个脚本实现。

折腾了半天就实现了两个功能:1。替换文件第一行2,在文件末尾追加多行

我觉得挺简单的,就避免文件操作,而且写文件会造成覆盖,所以就 直接使用系统的命令。

但是没想到那个echo输出引号和回车的问题把我缠住了,咳……自己也是个不灵光的人,就在这些小问题上浪费了时间。

code = 'if __name__ == "__main__":/n'

os.system("echo " + code + ">> " + filename)

这样是不可以的

code = 'if __name__ == /"__main__/":/n'也是失败的。还是对Shell不熟悉造成的。字符串的文本与字符串文本命令因为执行环境的不同应该有不同的表达方式

code = 'if __name__ == //"__main__//":/n'这样就可以输出引号追加到文件啦!这个还真得稍稍理解一下~~

但是那个换行符也折腾了我不少的时间。除了echo 要加上-e选项外,那个换行得这么写'n'!!这个可真是转义之转义了!字符串到echo的时候文本变成'//n',加上-e的选项 echo知道是文本'/n'(不是通常我们认为的换行符),把它整体当作换行执行,否则它只打印出‘n’来…… 这个有点难以理解,只好先记住它!

 

接着是提取一个类名,就是 ‘class XXX():‘的‘XXX’,当然用正则表达式了,而且是零宽断言。大部分时间花在了解函数功能上了(match和search...)。我的python环境是2.6.4,我先前以为不支持零宽断言,后来反复尝试才明白我的表达式有问题。提示'look-bind  requires fixed-width pattern'我把表达式从'(?<=class//s+)//w+'改成'(?<=class)//s//w+'就可以得到带有空白符的文本再调strip()属性就可以了。其中//s+不可以省略的,否则提取不出来……

人生就是如此的曲折……

你可能感兴趣的:(将QtDesigner的ui文件转成可执行的python代码)