赞
踩
本次设置窗体标题只用了一种方法,在进行窗体实例化后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_())
将图片转化为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文件中的路径
参考链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。