当前位置:   article > 正文

python+pyqt5设置窗体图标和任务栏图标及窗体标题的方法_pyqt设置图标

pyqt设置图标

本次设置窗体标题只用了一种方法,在进行窗体实例化后window = Window(),使用setWindowTitle(str)命令,在主程序中的设置命令如下所示:

  1. if __name__ == '__main__':
  2. QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
  3. app = QApplication(sys.argv)
  4. window = Window()
  5. # 设置窗口标题
  6. window.setWindowTitle('真棒')
  7. window.show()
  8. sys.exit(app.exec_())

本文主要讨论设置窗体图标及任务栏图标的问题,本次使用了四种方法实现了窗体图标的设置。方法一和方法二在通过pyinstaller转换为exe文件后,需要将图标放入exe文件目录,方法三和方法四将图标转换为.py文件可以和exe文件一起打包,无需再转存图标文件。这些方法均需在主函数的代码段

if __name__ == '__main__':

中进行添加

在模块中开头引用中需添加以下代码,否则任务栏图标不显示

  1. import ctypes
  2. ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")

1.方法一:QPixmap

将ico图标通过QPixmap方法进行设置,QPixmap方法对图标的放大效果较好,但是几十k的图标文件会被放大几倍或十几倍,更占据内存空间,因此该方法更适用于较小的图片。

  1. if __name__ == '__main__':
  2. QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
  3. app = QApplication(sys.argv)
  4. window = Window()
  5. # 方法一:设置窗口图标,此方法占内存多,但图标显示效果较好,适用于较小的图片
  6. ico_path = os.path.join(os.path.dirname(__file__), 'subway.ico')
  7. icon = QtGui.QIcon()
  8. icon.addPixmap(QtGui.QPixmap(ico_path), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  9. window.setWindowIcon(icon)
  10. # 设置窗口标题
  11. window.setWindowTitle('真棒')
  12. window.show()
  13. sys.exit(app.exec_())

2.方法二:setWindowIcon(QIcon("./subway.ico"))

此方法直接将ico图片设置为窗体图标显示效果不如方法一,适用于较大的图片

  1. if __name__ == '__main__':
  2. QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
  3. app = QApplication(sys.argv)
  4. window = Window()
  5. # 方法二:设置窗口图标,此方法占内存小,显示效果不如方法一,适用于较大的图片
  6. window.setWindowIcon(QIcon("./subway.ico"))
  7. # 设置窗口标题
  8. window.setWindowTitle('真棒')
  9. window.show()
  10. sys.exit(app.exec_())

3.方法三:base64

本方法引用文章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

  1. import base64
  2. def pictopy(picture_names, py_name):
  3. """
  4. 将图像文件转换为py文件
  5. :param picture_name:
  6. :return:
  7. """
  8. write_data = []
  9. for picture_name in picture_names:
  10. filename = picture_name.replace('.', '_')
  11. open_pic = open("%s" % picture_name, 'rb')
  12. b64str = base64.b64encode(open_pic.read())
  13. open_pic.close()
  14. # 注意这边b64str一定要加上.decode()
  15. write_data.append('%s = "%s"\n' % (filename, b64str.decode()))
  16. f = open('%s.py' % py_name, 'w+')
  17. for data in write_data:
  18. f.write(data)
  19. f.close()
  20. # pics = ["logo_2.png", "logo.ico"] 中的图片存放在PicToPy.py同一目录中,运行完成后,
  21. # 会在当前路径看到一个memory_pic.py文件
  22. pics = ["logo_2.png", "subway.ico"]
  23. pictopy(pics, 'memory_pic') # 将pics里面的图片写到 memory_pic.py 中
  24. print("ok")

在通过PicToPy.py对图片进行转存后,图片保存在memory_pic.py文件。

在主函数中对图标进行调用,注意图片文件在转化后命名规则变为“文件名_文件类型”,本项目中subway.ico变为subway_ico,代码如下:

  1. import base64
  2. from memory_pic import subway_ico
  3. if __name__ == '__main__':
  4. QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
  5. app = QApplication(sys.argv)
  6. window = Window()
  7. # 方法三:把图片转化为base64格式
  8. Logo = QtGui.QPixmap()
  9. Logo.loadFromData(base64.b64decode(subway_ico))
  10. icon = QtGui.QIcon()
  11. icon.addPixmap(Logo, QtGui.QIcon.Normal, QtGui.QIcon.Off)
  12. window.setWindowIcon(icon)
  13. # 设置窗口标题
  14. window.setWindowTitle('真棒')
  15. window.show()
  16. sys.exit(app.exec_())

4.方法四:通过pyqt的QTDesigner

在使用pyqt进行窗口资源管理时,可以将.qrc文件通过PyRCC将图片转化为.py文件,再在主函数中引用即可

 通过“编辑样式表”打开“添加资源”按钮,通过编辑资源将图标文件添加到.qrc文件,使用PyRCC将rec.qrc(可以另起名字)转化为rec.py。主函数中代码如下:

  1. import ico_rc # 必须引用图标文件,不然图标不显示
  2. if __name__ == '__main__':
  3. QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) #Qt从5.6.0开始,支持High-DP
  4. app = QApplication(sys.argv)
  5. window = Window()
  6. # 方法四:
  7. icon = QtGui.QIcon()
  8. icon.addPixmap(QtGui.QPixmap(":/ico/subway.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  9. window.setWindowIcon(icon)
  10. # 设置窗口标题
  11. window.setWindowTitle('真棒')
  12. window.show()
  13. 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图片文件的编写和使用

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号