本次设置窗体标题只用了一种方法,在进行窗体实例化后window = Window(),使用setWindowTitle(str)命令,在主程序中的设置命令如下所示:
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
app = QApplication(sys.argv)
window = Window()
# 设置窗口标题
window.setWindowTitle('真棒')
window.show()
sys.exit(app.exec_())
本文主要讨论设置窗体图标及任务栏图标的问题,本次使用了四种方法实现了窗体图标的设置。方法一和方法二在通过pyinstaller转换为exe文件后,需要将图标放入exe文件目录,方法三和方法四将图标转换为.py文件可以和exe文件一起打包,无需再转存图标文件。这些方法均需在主函数的代码段
if __name__ == '__main__':
中进行添加
在模块中开头引用中需添加以下代码,否则任务栏图标不显示
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")
将ico图标通过QPixmap方法进行设置,QPixmap方法对图标的放大效果较好,但是几十k的图标文件会被放大几倍或十几倍,更占据内存空间,因此该方法更适用于较小的图片。
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
app = QApplication(sys.argv)
window = Window()
# 方法一:设置窗口图标,此方法占内存多,但图标显示效果较好,适用于较小的图片
ico_path = os.path.join(os.path.dirname(__file__), 'subway.ico')
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(ico_path), QtGui.QIcon.Normal, QtGui.QIcon.Off)
window.setWindowIcon(icon)
# 设置窗口标题
window.setWindowTitle('真棒')
window.show()
sys.exit(app.exec_())
此方法直接将ico图片设置为窗体图标显示效果不如方法一,适用于较大的图片
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
app = QApplication(sys.argv)
window = Window()
# 方法二:设置窗口图标,此方法占内存小,显示效果不如方法一,适用于较大的图片
window.setWindowIcon(QIcon("./subway.ico"))
# 设置窗口标题
window.setWindowTitle('真棒')
window.show()
sys.exit(app.exec_())
本方法引用文章Python文件带图片打包exe(Pyinstaller)https://blog.csdn.net/ziigea/article/details/112647727#:~:text=Python%E6%96%87%E4%BB%B6%E5%B8%A6%E5%9B%BE%E7%89%87%E6%89%93%E5%8C%85exe%EF%BC%88Pyinstaller%EF%BC%89%201%201.%E5%AE%89%E8%A3%85%20pip%20install%20pywin32%20pip%20install,2.%20%E4%B8%8D%E5%8A%A0%E2%80%93noupx%E5%8F%AF%E6%89%93%E5%8C%85%E6%88%90%E5%8A%9F%EF%BC%8C%E4%BD%86%E6%96%87%E4%BB%B6%E5%8F%AF%E8%83%BD%E9%97%AA%E9%80%80%203%203.%E5%9B%BE%E7%89%87%E6%96%87%E4%BB%B6%E6%89%93%E5%8C%85%20%E5%A6%82%E6%9E%9C%E6%9C%89%E5%9B%BE%E7%89%87%E6%96%87%E4%BB%B6%EF%BC%8C%E5%88%99%E9%A1%BB%E5%9C%A8%E6%89%93%E5%8C%85%E4%B9%8B%E5%89%8D%E6%8A%8A%E5%9B%BE%E7%89%87%E8%BD%AC%E5%8C%96%E6%88%90py%E6%96%87%E4%BB%B6%EF%BC%8C%E5%86%8D%E4%BD%BF%E7%94%A8%E4%B8%8A%E8%BF%B0%E6%96%B9%E6%B3%95%E6%89%93%E5%8C%85%E3%80%82%20%E8%BF%99%E9%87%8C%E9%87%87%E7%94%A8base64%E6%A0%BC%E5%BC%8F%20PicToPy.py%20
将图片转化为base64格式,保存在.py文件中,在进行打包时可以将图标直接放入exe文件中,无需再exe目录中再保存ico图标文件。
PicToPy.py
import base64
def pictopy(picture_names, py_name):
"""
将图像文件转换为py文件
:param picture_name:
:return:
"""
write_data = []
for picture_name in picture_names:
filename = picture_name.replace('.', '_')
open_pic = open("%s" % picture_name, 'rb')
b64str = base64.b64encode(open_pic.read())
open_pic.close()
# 注意这边b64str一定要加上.decode()
write_data.append('%s = "%s"\n' % (filename, b64str.decode()))
f = open('%s.py' % py_name, 'w+')
for data in write_data:
f.write(data)
f.close()
# pics = ["logo_2.png", "logo.ico"] 中的图片存放在PicToPy.py同一目录中,运行完成后,
# 会在当前路径看到一个memory_pic.py文件
pics = ["logo_2.png", "subway.ico"]
pictopy(pics, 'memory_pic') # 将pics里面的图片写到 memory_pic.py 中
print("ok")
在通过PicToPy.py对图片进行转存后,图片保存在memory_pic.py文件。
在主函数中对图标进行调用,注意图片文件在转化后命名规则变为“文件名_文件类型”,本项目中subway.ico变为subway_ico,代码如下:
import base64
from memory_pic import subway_ico
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
app = QApplication(sys.argv)
window = Window()
# 方法三:把图片转化为base64格式
Logo = QtGui.QPixmap()
Logo.loadFromData(base64.b64decode(subway_ico))
icon = QtGui.QIcon()
icon.addPixmap(Logo, QtGui.QIcon.Normal, QtGui.QIcon.Off)
window.setWindowIcon(icon)
# 设置窗口标题
window.setWindowTitle('真棒')
window.show()
sys.exit(app.exec_())
在使用pyqt进行窗口资源管理时,可以将.qrc文件通过PyRCC将图片转化为.py文件,再在主函数中引用即可
通过“编辑样式表”打开“添加资源”按钮,通过编辑资源将图标文件添加到.qrc文件,使用PyRCC将rec.qrc(可以另起名字)转化为rec.py。主函数中代码如下:
import ico_rc # 必须引用图标文件,不然图标不显示
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
app = QApplication(sys.argv)
window = Window()
# 方法四:
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/ico/subway.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
window.setWindowIcon(icon)
# 设置窗口标题
window.setWindowTitle('真棒')
window.show()
sys.exit(app.exec_())
此方法较方法三,在使用pyqt时省去了使用PicToPy.py对图片进行转化的操作,可以直接通过PyRCC将图片转换为.py文件,其中":/ico/subway.ico"为图标文件在添加到资源.qrc文件中的路径
参考链接:
Python文件带图片打包exe(Pyinstaller)
python+pyqt5+pyinstaller 将ico图标打包进exe方法
QPixmap、QIcon和QImage
手把手教你pyqt中.qrc图片文件的编写和使用