最近在学习wxPython时,发现img2py工具只能处理单个图标,就自己写了一个简单的小工具,把文件夹下所有的图标文件转化到py文件里, 话不多说,直接上代码:

 # -*- coding: utf-8 -*-

 # --------------------------------------------------------------------------------------------------------------------------------
# Class: Img2Python
# Platform: WINNT
# Comments: Convert all ico to python file for the selected folder
# User: JustDoIT
# Date: 6th Dec, 2016
# -------------------------------------------------------------------------------------------------------------------------------- import wx, os, sys, subprocess
import img
from wx.tools.img2py import img2py # --------------------------------------------------------------------------------------------------------------------------------
# Class: Img2Python
# --------------------------------------------------------------------------------------------------------------------------------
class Img2Python(wx.Frame): def __init__(self, *args, **kwargs):
super(Img2Python, self).__init__(*args, **kwargs) self.Size = wx.Size(550, 435)
self.SetIcon(img.app.getIcon()) self.InitUI() self.Centre()
self.Show() def InitUI(self): panel = wx.Panel(self) sizer = wx.GridBagSizer(5, 5) text1 = wx.StaticText(panel, label="Image to python")
text1.SetFont(wx.Font(16, wx.DEFAULT, wx.ITALIC, wx.NORMAL))
sizer.Add(text1, pos=(0, 0), span = (1, 4) ,flag = wx.LEFT | wx.TOP | wx.RIGHT, border=5) icon = wx.StaticBitmap(panel, bitmap = img.conf32.getBitmap())
sizer.Add(icon, pos=(0, 4), flag = wx.TOP | wx.RIGHT | wx.ALIGN_RIGHT, border=5) line = wx.StaticLine(panel)
sizer.Add(line, pos=(1, 0), span=(1, 5), flag=wx.EXPAND | wx.BOTTOM, border=0) # -------------------------------------------------------------------------------------------------------------------------------
self.txtdir = wx.TextCtrl(panel, value = 'Select directory ...', style = wx.TE_LEFT | wx.TE_READONLY)
self.btndir = wx.Button(panel, wx.ID_HOME, label = 'Browser') sizer.Add(self.txtdir, pos = (2, 0), span = (1, 4), flag = wx.LEFT | wx.TOP | wx.EXPAND, border = 5)
sizer.Add(self.btndir, pos = (2, 4),flag = wx.TOP | wx.EXPAND, border = 5)
self.btndir.Bind(wx.EVT_BUTTON, self.OnButton) # Attribute choice -------------------------------------------------------------------------------------------------------------
attbox = wx.BoxSizer(wx.HORIZONTAL)
nflag = wx.CheckBox(panel, label = '-n' )
mflag = wx.CheckBox(panel, label = '-m' )
iflag = wx.CheckBox(panel, label = '-i' )
fflag = wx.CheckBox(panel, label = '-f' ) attbox.Add(nflag, flag = wx.LEFT | wx.RIGHT, border = 5)
attbox.Add(mflag, flag = wx.LEFT | wx.RIGHT, border = 15)
attbox.Add(iflag, flag = wx.LEFT | wx.RIGHT, border = 15)
attbox.Add(fflag, flag = wx.LEFT | wx.RIGHT, border = 15) sizer.Add(attbox, pos = (3, 0), span = (1, 5), flag = wx.TOP | wx.BOTTOM | wx.EXPAND, border = 0 ) # ------------------------------------------------------------------------------------------------------------------------------
sb = wx.StaticBox(panel, label = 'File Log')
sboxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL) self.outstr = wx.TextCtrl(panel, size = (525, 160), style = wx.TE_MULTILINE | wx.TE_READONLY | wx.HSCROLL | wx.VSCROLL) sboxsizer.Add(self.outstr, proportion = 1, flag = wx.EXPAND) sizer.Add(sboxsizer, pos = (4, 0), span =(1, 5), flag = wx.LEFT | wx.EXPAND | wx.BOTTOM, border = 5) line2 = wx.StaticLine(panel)
sizer.Add(line2, pos=(6, 0), span=(1, 5), flag = wx.BOTTOM | wx.EXPAND, border = 5) # ------------------------------------------------------------------------------------------------------------------------------
btnhelp = wx.Button(panel, 301, label = 'Open')
btnok = wx.Button(panel, 302, label = 'OK')
btncancel = wx.Button(panel, 303, label = 'Cancel') sizer.Add(btnhelp, pos=(7, 0), flag=wx.EXPAND|wx.BOTTOM, border=10)
sizer.Add(btnok, pos=(7, 3), flag=wx.EXPAND|wx.BOTTOM, border=10)
sizer.Add(btncancel, pos=(7, 4), flag=wx.EXPAND|wx.BOTTOM, border=10) btnhelp.Bind(wx.EVT_BUTTON, self.OnButton)
btnok.Bind(wx.EVT_BUTTON, self.OnButton)
btncancel.Bind(wx.EVT_BUTTON, self.OnButton) # ------------------------------------------------------------------------------------------------------------------------------
sizer.AddGrowableCol(0)
sizer.AddGrowableRow(4) panel.SetSizer(sizer) def OnButton(self, e): eid = e.GetId() if eid == wx.ID_HOME: dlg = wx.DirDialog(self, 'Select forder', style = wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
self.txtdir.SetValue(dlg.GetPath())
print self.txtdir dlg.Destroy() elif eid == 301: if os.path.isdir(self.txtdir.GetValue()):
subprocess.Popen('explorer ' + self.txtdir.GetValue())
else:
wx.MessageBox('Pls select correct image folder !', 'Error', wx.OK | wx.ICON_ERROR) elif eid == 302:
if os.path.isdir(self.txtdir.GetValue()):
self.forderprocess()
else:
wx.MessageBox('Pls select correct image folder !', 'Error', wx.OK | wx.ICON_ERROR)
elif eid == 303:
self.Close()
else: e.Skip() def forderprocess(self):
folder = self.txtdir.GetValue()
listext = ('.png', '.ico', '.icon', '.gif') pyfile = folder + '\img.py' if os.path.isdir(folder): self.outstr.AppendText('Starting.................................................................................\n\n') for name in os.listdir(folder):
(x, ext) = os.path.splitext(name) if ext in listext:
img = os.path.join(folder, name) fs = open('log.txt', 'w')
temp = sys.stdout
sys.stdout = fs self.outstr.AppendText('Name :' + x) if os.path.isfile(pyfile):
ret = img2py(img, pyfile, append = True)
else:
ret = img2py(img, pyfile, append = True) sys.stdout = temp
fs.close()
str = open('log.txt','r').read()
self.outstr.AppendText(str + '\n') self.outstr.AppendText('Done ....................................................................................\n') # --------------------------------------------------------------------------------------------------------------------------------
# Class: APP
# --------------------------------------------------------------------------------------------------------------------------------
class App(wx.App): def OnInit(self):
defaultstyle = wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN | wx.FRAME_NO_TASKBAR
Img2Python(None, title = 'Image To Python', style = defaultstyle)
return True # --------------------------------------------------------------------------------------------------------------------------------
# Function main()
# --------------------------------------------------------------------------------------------------------------------------------
def main():
App().MainLoop() if __name__ == '__main__':
main()

效果图:

wxPython tools img2py的更多相关文章

  1. 将图片文件转换为.py文件

    最近用wxpython写了一个脚本,其中要给窗体设置图标文件,需要单独的一个ico文件,这样就比较影响美观,另外打包的时候还要将图标文件一起打包很繁琐.这时候看到wxpython文件有一个工具img2 ...

  2. python下wxpython程序国际化的实践(中文英文切换)

    一.什么是python的国际化(I18N) 有关I18N,百度上解释一大堆,个人比较喜欢这个说法. i18n是 Internationalization 这个英文的简写,因为International ...

  3. python---基础知识回顾(九)图形用户界面-------WxPython

    主要使用wxPython(最成熟的跨平台python GUI工具包) wxPython手册 前戏:基础了解 import wx class MyFrame(wx.Frame): #创建自定义Frame ...

  4. wxwidget wxpython 可视化开发工具

    wxwidget官方建议的工具集合:http://wiki.wxwidgets.org/Tools 支持wxpython可视化开发工具 wxFormBuilder wxGlade wxDesigner ...

  5. 离线安装wxpython

    离线安装wxpython 前言 由于工作环境,我的工作机是在离线环境下的,没法连接外网.但是自己又想学习一下wxpython,只好自己手动离线安装,本来以为很简单的,但是实际上...一言难尽. 基本环 ...

  6. openpyxl,xlrd,win32com,wxpython,logging

    目录 一. openpyxl常用操作总结 二. xlrd常用操作总结 三. win32com常用操作总结 四. 自定义异常 五. 判断中文 六. Excel数字字母转换 七. 使用wxpython进行 ...

  7. 基于WxPython的GUI框架toolkit-frame介绍

    源码下载地址:https://download.csdn.net/download/zy0412326/12154342 源码下载地址:https://pan.baidu.com/s/1-s2WaQm ...

  8. 解决 Could not find com.android.tools.build:gradle 问题

    今天拉同事最新的代码,编译时老是报如下错误: Error:Could not find com.android.tools.build:gradle:2.2.0.Searched in the fol ...

  9. 免费的精品: Productivity Power Tools 动画演示

    Productivity Power Tools 是微软官方推出的 Visual Studio 扩展,被用以提高开发人员生产率.它的出现一定程度上弥补和完善了 Visual Studio 自身的不足, ...

随机推荐

  1. 【hadoop代码笔记】Hadoop作业提交中EagerTaskInitializationListener的作用

    在整理FairScheduler实现的task调度逻辑时,注意到EagerTaskInitializationListener类.差不多应该是job提交相关的逻辑代码中最简单清楚的一个了. todo: ...

  2. Apache Spark GraphX的简介

    简单地说,GraphX是大规模图计算框架. GraphX 是 Spark 中的一个重要子项目,它利用 Spark 作为计算引擎,实现了大规模图计算的功能,并提供了类似 Pregel 的编程接口. Gr ...

  3. POJ 2502 Subway (最短路)

    Subway 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/L Description You have just moved ...

  4. display:none;与visibility:hidden;的区别

    visibility:隐藏对应的元素但不挤占该元素原来的空间.display:隐藏对应的元素并且挤占该元素原来的空间. 下面来看visibility和dispaly的一些参数 visibility用来 ...

  5. [iOS微博项目 - 1.1] - 设置导航栏主题(统一样式)

    A.导航栏两侧文字按钮 1.需求: 所有导航栏两侧的文字式按钮统一样式 普通样式:橙色 高亮样式:红色 不可用样式:亮灰 阴影:不使用 字体大小:15   github: https://github ...

  6. 山东理工大学ACM平台题答案关于C语言 1181 C语言实验——最小公倍数和最大公约数

    C语言实验——最小公倍数和最大公约数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 从键盘输入两个正整数,求这两个正整数的最小公 ...

  7. 糟糕的双重检查加锁(DCL)

    在Java并发编程时,同步都会存在着巨大的性能开销,因此,人们使用了很多的技巧来降低同步的影响,这其中有一些技巧很好,但是也有一些技巧存在一些缺陷,下面要结束的双重检查加锁(DCL)就是有缺陷的一类. ...

  8. Linux在向磁盘新建文件的时候在系统层面的四步操作

    ----------- 1.存储文件属性.内核先找到一个空的i节点,并把文件属性信息记录其中.   2.存储数据.先计算要多少个磁盘块,在内核自由块列表找到合适数量的磁盘块,并把数据从内核的缓冲区依次 ...

  9. 【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码

    说明: 本文參考官方Ref Guide,Developer API和众多博客.并结合实測代码编写.具体总结HBase的Filter功能,并附上每类Filter的对应代码实现. 本文尽量遵从Ref Gu ...

  10. Asp.net MVC @Html.DisplayNameFor中文乱码解决办法

    这是utf8的问题,vs2015默设要用utf8编码,以前的gb2312皆会产生乱码 这问题还是会继续发生,因为常会复制旧程序档进新方案.它会出现很奇怪的错误,而不是这么明显的乱码,你怎么抓bug都抓 ...