python应用: GUI界面设计之JPG转ico工具编辑(PythonMagic)

1.环境:
windows7
python3.7
该实例设计到的库有: PythonMagick,win32api,win32con,wx,os 等模块
该实例运用到:提示消息框,GUI界面,打开当前文件对话框等功能:
注:
先安装模块:pip3 install PythonMagick 发现python3.7 中下载不下来
通过其他网站去下载PythonMagick模块:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonmagick
找到对应自己系统环境的那个包,我在这存放到F盘中;在进入F盘执行安装:
#F:>pip3 install PythonMagick-0.9.19-cp37-cp37m-win_amd64.whl
打包时可以使用 -i 参数带上ico图标
格式如下:
#pyinstaller -F -i tupian\xxx.ico myfile.py
若遇到一下错误
#Python 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案
该错误是路径格式出错问题

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

import wx
import os,time
import PythonMagick
import win32api,win32con
#F:\python-object>pyinstaller -F -i 20190123.ico -w ico.py  打包

def Change_Ico(event):


text11 = text1.GetValue()
	text22 = text2.GetValue()
	print(text11)
	#获取img URL路径,这是FilePicker类的函数方法
	img_url = m_filePicker1.GetPath()
	# print(img_url)
	img = PythonMagick.Image(img_url.encode('utf-8'))
	# 这里要设置一下尺寸,不然会报ico尺寸异常错误
	filename = img.fileName().split('.')[-2]
	name = filename.split('\\')[-1]
	# print(name)
	# print(img.magick())
	# print(img.size().width())
	size1 = text11+"x"+text22
	img.sample(size1)
	img.write(name+'.ico')
#提示信息,保存后的ico在哪里,理应在当前执行python文件的路径下	
def Open_URL(event):
	path = os.getcwd()
	#print(path)
	win32api.MessageBox(0, "ico save dir:"+path+'\\', "ICO logo",win32con.MB_OK)
                    
#入口主函数
if __name__ =='__main__':
	app=wx.App() #打开一个主程序
	#新增一个窗口
	win= wx.Frame(None,title=u'JGP Change to ico logo',size=(400,300))
    #新增一张画布
	panel= wx.Panel(win)
	#在画布上新增多个组件或控件
	imgText = wx.StaticText(panel,label=u'Please Select Image:')
	m_filePicker1 = wx.FilePickerCtrl(panel,path='',message=wx.EmptyString, wildcard='*.*',style=wx.FLP_DEFAULT_STYLE)

	#设置ico像素的文本框
	imgText1 = wx.StaticText(panel,label=u'Set ico format size:')
	text1 =  wx.TextCtrl(panel,size=(50,25))
	imgText2 = wx.StaticText(panel,label=u'x')
	text2 =  wx.TextCtrl(panel,size=(50,25))
	#添加一个按钮
	m_button1 = wx.Button(panel, label=u"图片格式jgp|png|gif等转换成ico图标",size=(328,40))
	#给该按钮添加一事件
	m_button1.Bind( wx.EVT_BUTTON, Change_Ico )
	m_button2 = wx.Button(panel, label=u"提示保存的ico图标路径",size=(328,40))
	m_button2.Bind( wx.EVT_BUTTON, Open_URL )
	#创建一个Box尺寸器(默认是横向,对控件进行布局管理)
	box = wx.BoxSizer()
	box.Add(imgText,proportion = 0,flag = wx.EXPAND|wx.ALIGN_RIGHT,border = 3)
	box.Add(m_filePicker1,proportion = 2,flag = wx.EXPAND|wx.ALL,border = 3)

	box1 = wx.BoxSizer()
	box1.Add(imgText1,proportion = 0,flag = wx.EXPAND|wx.ALIGN_RIGHT,border = 3)
	box1.Add(text1,proportion = 0,flag = wx.EXPAND|wx.ALIGN_RIGHT,border = 3)
	box1.Add(imgText2,proportion = 0,flag = wx.EXPAND|wx.ALIGN_RIGHT,border = 3)
	box1.Add(text2,proportion = 0,flag = wx.EXPAND|wx.ALIGN_RIGHT,border = 3)
 
	v_box = wx.BoxSizer(wx.VERTICAL)
	v_box.Add(box,proportion = 0,flag = wx.ALL,border = 3)
	v_box.Add(box1,proportion = 0,flag = wx.ALL,border = 3)
	v_box.Add(m_button1,proportion = 0,flag = wx.ALL,border = 3)
	v_box.Add(m_button2,proportion = 0,flag = wx.ALL,border = 3)
	#设置画布的主尺寸器(一层包一层)
	panel.SetSizer(v_box) 
	win.Show()
	app.MainLoop()
	说明:在实际中,如果在Box中又添加Box绑定,则里面的Box不生效。主要是对外部的Box的参数有效,有些控件需要自己自定义控件大小。

以上代码效果如下图:
python应用: GUI界面设计之JPG转ico工具编辑(PythonMagic)