说到exe那就是windows程序了,
python调用win32api 需要先安装https://github.com/mhammond/pywin32/releases
转化成ico有2种,一种是pyqt5另存图片换个文件名,这个可能不太专业,第2种是PythonMagick
https://download.lfd.uci.edu/pythonlibs/w3jqiv8s/PythonMagick-0.9.19-cp37-cp37m-win_amd64.whl pip install PythonMagick-0.9.19-cp37-cp37m-win_amd64.whl
import sys
import win32ui
import win32gui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PIL import Image
class testWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(180.0, 130.0, 280.0, 400.0)
self.setMouseTracking(True)
argv=sys.argv
if len(argv)>1:
large, small = win32gui.ExtractIconEx(argv[1], 0)
else:
large, small = win32gui.ExtractIconEx(r"C:/work/Mail139_disk.exe", 0)
win32gui.DestroyIcon(small[0])
self.bitmapFromHIcon(large[0])
#self.pixmap =QPixmap.fromWinHBITMAP(self.bitmapFromHIcon(large[0]), 2)
self.pixmap =QPixmap('icon.png')
self.pixmap.save("a.ico","ico")
def bitmapFromHIcon(self, hIcon):
hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap(hdc, 32, 32)
hdc = hdc.CreateCompatibleDC()
hdc.SelectObject(hbmp)
hdc.DrawIcon((0, 0), hIcon)
hdc.DeleteDC()
bmpstr=hbmp.GetBitmapBits(True)
img = Image.frombuffer( 'RGBA',(32,32), bmpstr, 'raw', 'BGRA', 0, 1)
img.save('icon.png')
return hbmp.GetHandle()
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(Qt.NoPen)
painter.setBrush(QBrush(QColor(255.0, 255.0, 255.0, 255.0), Qt.SolidPattern))
painter.drawRect(QRect(0.0, 0.0, 280.0, 400.0))
painter.drawPixmap(QRect(0.0, 0.0, 32.0, 32.0), self.pixmap)
painter.end()
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = testWindow()
mainWindow.show()
app.exec_()
注意fromWinHBITMAP 是pyqt4的函数pyqt5没有了,所以就简单点先存为png文件再转化ico,以上代码保存pyqtico.py,然后用下面命令使用:
python pyqtico.py C:/work/Mail139_disk.exe
PythonMagick的用法另一篇博客文章已经有过示例,就不用再写了,如果要打包pyqt5相当大,仅仅这个功能不值当用。此处代码仅仅为了练习,打包成exe的话记得win10打包只能到win10用,不能把exe放到xp之类其他os