PYTQ + ico圖標制作
在使用QT,或者pyqt的過程中,經(jīng)常會因為沒有圖標而煩惱。(把自己喜歡的圖片轉(zhuǎn)換成ico格式,用在程序的圖標顯示上)
先看下效果圖:

image.png
于是就用pyqt制作一個轉(zhuǎn)ico的工具,方便使用。
這里使用到PythonMagick庫文件:這里介紹了這個庫文件的安裝
接下來就是上代碼了:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'imageToIco.ui'
#
# Created by: PyQt5 UI code generator 5.7.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import os
import PythonMagick
global_path = "C:/"
global_ico = []
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(758, 591)
MainWindow.setMinimumSize(QtCore.QSize(758, 591))
MainWindow.setMaximumSize(QtCore.QSize(758, 591))
MainWindow.setStyleSheet("background-color: rgb(203, 242, 255);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(19, 79, 721, 481))
self.groupBox.setStyleSheet("background-color: rgb(249, 249, 249)")
self.groupBox.setTitle("")
self.groupBox.setObjectName("groupBox")
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setGeometry(QtCore.QRect(110, 30, 481, 21))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(30, 30, 72, 21))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setGeometry(QtCore.QRect(610, 30, 71, 21))
self.pushButton.setStyleSheet("background-color: rgb(203, 242, 255);")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
self.pushButton_2.setGeometry(QtCore.QRect(610, 70, 71, 21))
self.pushButton_2.setStyleSheet("background-color: rgb(203, 242, 255);")
self.pushButton_2.setObjectName("pushButton_2")
self.tableWidget = QtWidgets.QTableWidget(self.groupBox)
self.tableWidget.setGeometry(QtCore.QRect(30, 111, 661, 351))
self.tableWidget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(4)
self.tableWidget.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
self.label_3 = QtWidgets.QLabel(self.groupBox)
self.label_3.setGeometry(QtCore.QRect(30, 70, 72, 21))
self.label_3.setObjectName("label_3")
self.lineEdit_w = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_w.setGeometry(QtCore.QRect(110, 70, 61, 21))
self.lineEdit_w.setObjectName("lineEdit_w")
self.label_4 = QtWidgets.QLabel(self.groupBox)
self.label_4.setGeometry(QtCore.QRect(180, 70, 31, 21))
self.label_4.setObjectName("label_4")
self.lineEdit_h = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit_h.setGeometry(QtCore.QRect(200, 70, 61, 21))
self.lineEdit_h.setObjectName("lineEdit_h")
self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_2.setGeometry(QtCore.QRect(20, 10, 721, 61))
self.groupBox_2.setTitle("")
self.groupBox_2.setObjectName("groupBox_2")
self.label_2 = QtWidgets.QLabel(self.groupBox_2)
self.label_2.setGeometry(QtCore.QRect(230, 10, 271, 41))
self.label_2.setObjectName("label_2")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.pushButton.clicked.connect(self.openFile)
self.pushButton_2.clicked.connect(self.toIco)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "WB_轉(zhuǎn)ico"))
MainWindow.setWindowIcon(QtGui.QIcon("wb.ico"))
self.label.setText(_translate("MainWindow", "PDF文件:"))
self.pushButton.setText(_translate("MainWindow", "選取文件"))
self.pushButton_2.setText(_translate("MainWindow", "開始轉(zhuǎn)換"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "源文件"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "尺寸"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "備注"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "下載"))
self.label_3.setText(_translate("MainWindow", "尺 寸:"))
self.lineEdit_w.setText(_translate("MainWindow", "128"))
self.label_4.setText(_translate("MainWindow", "X"))
self.lineEdit_h.setText(_translate("MainWindow", "128"))
self.tableWidget.horizontalHeader().setStyleSheet("QHeaderView::section {background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,\
stop:0 #00007f, stop: 0.5 #00007f,stop: 0.6 #00007f, stop:1 #00007f);color: white;}")
self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt; font-weight:600; color:#55aa00;\">圖片轉(zhuǎn)ico</span></p></body></html>"))
self.tableWidget.setColumnWidth(0, 300)
self.tableWidget.setColumnWidth(1, 100)
self.tableWidget.setColumnWidth(2, 100)
def openFile(self):
# fileName = QtWidgets.QFileDialog.getOpenFileName(self, "選擇文件", self.directory, "Text Files(*.xml)")
global global_path
fileName, filetype = QtWidgets.QFileDialog.getOpenFileName(self.centralwidget,
"選取文件",
global_path,
"PNG Files(*.png);;JPEG Files(*.jpg)") # 設(shè)置文件擴展名過濾,注意用雙分號間隔
if fileName == '':
print('取消')
return
# print(os.path.basename( fileName) ) # 返回文件名
# print(os.path.dirname(fileName)) # 返回目錄路徑
# print(os.path.split(fileName)) # 分割文件名與路徑
# print(os.path.join(os.path.dirname(fileName), 'runoob.txt')) # 將目錄和文件名合成一個路徑
global_path = os.path.dirname(fileName)
self.lineEdit.setText(fileName)
def toIco(self):
global global_ico
if self.lineEdit.text() == "":
QtWidgets.QMessageBox.warning(self.centralwidget, "提示", "請選取轉(zhuǎn)換文件")
return
if not os.path.exists(self.lineEdit.text()):
QtWidgets.QMessageBox.warning(self.centralwidget, "提示", "文件不存在!")
return
if self.lineEdit_w.text() == '' or self.lineEdit_h.text() == '':
QtWidgets.QMessageBox.warning(self.centralwidget, "提示", "請輸入尺寸!")
return
path = self.lineEdit.text()
size = self.lineEdit_w.text() + "x" + self.lineEdit_h.text()
index = self.tableWidget.rowCount()
try:
img = PythonMagick.Image(path)
# 這里要設(shè)置一下尺寸,不然會報ico尺寸異常錯誤
img.sample(size)
global_ico.append(img)
self.tableWidget.setRowCount(index + 1)
self.tableWidget.setItem(index, 0, QtWidgets.QTableWidgetItem(path))
self.tableWidget.setItem(index, 1, QtWidgets.QTableWidgetItem(size))
self.tableWidget.setItem(index, 2, QtWidgets.QTableWidgetItem("成功"))
item1 = QtWidgets.QPushButton(self.centralwidget)
item1.setObjectName(str(index))
item1.clicked.connect(self.save_ico)
item1.setText("下載")
self.tableWidget.setCellWidget(self.tableWidget.rowCount() - 1, 3, item1)
except:
self.tableWidget.setRowCount(index + 1)
self.tableWidget.setItem(index, 0, QtWidgets.QTableWidgetItem(path))
self.tableWidget.setItem(index, 1, QtWidgets.QTableWidgetItem(size))
self.tableWidget.setItem(index, 2, QtWidgets.QTableWidgetItem("失敗"))
QtWidgets.QMessageBox.warning(self.centralwidget, "提示", "轉(zhuǎn)換失??!")
def save_ico(self):
global global_ico
global global_path
directory = QtWidgets.QFileDialog.getExistingDirectory(self.centralwidget,
"保存路徑",
global_path) # 起始路徑
if directory == '':
print('取消')
return
new_path = directory
index = int(self.tableWidget.sender().objectName())
name = os.path.basename( self.tableWidget.item(index,0).text()) # 返回文件名
name_list = name.split('.')
name = name_list[0] + '.ico'
global_ico[index].write(os.path.join(new_path , name))
if __name__ =='__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
如果代碼都不想看,直接下載打包好的程序:ico圖標制作
提取碼:2bam