天天看点

Python+PyQT5学习笔记之设置Icon及背景图片

        吐槽:QT Designer实在用着不舒服(用惯了Winform的是否会觉得这个就是辣鸡)...所以一直手动画页面, 可能还灭有接触到复杂布局, QT Designer还需要持续学习和作为目前的辅助工具使用.

        今天遇到的问题其实很简单, 做了一个登录界面, 验证登录名密码后跳转到主页面. 想把登录页面做的好看一点, Icon图标, 背景图片, 都准备好了, 然后写代码去控制了窗体大小等等属性, 到了关键的读取图片的步骤, 却死活不显示. 

        我最开始是这么写的(如下), 发现无法读取, 然后就在斜杠和斜杠前面加点, 或者两个点, 因为做C#时同级目录需要点或者点点就可以访问读取路径, 但是在这里不好使.

MainWindow.setWindowIcon(QIcon('/images/logo.png'))
MainWindow.setStyleSheet('background-image:url(/images/Background.jpg)')
           

        经过我深思熟虑, 熟虑深思之后 , 我决定试试绝对路径 . 我把Icon的读取路径改为带盘符, 带文件夹名, 一级一级的到images文件夹, 然后运行 , 成功了! 同样的我把设置背景图片的路径也改成了绝对路径, 但是结果失败了, 依然不显示 . 因为用了sys.path[0]获取当前的python文件路径, 于是用print(self.bgUrl) 打印出来路径, 打印显示没有任何问题 , 那为啥Icon显示, 背景图片不行呢? 于是我又冒出一个想法 , 是不是斜杠的问题呢 , 因为系统读取的斜杠是向右的"\" , Icon显示没问题 , 那既然背景图片无法显示 , 那我用Replace把向右的斜杠 , 替换成向左的 , 是否可以呢? 于是将变量格式化self.bgUrl.replace('\\',"/") , 发现成功了! 

        也就是说setWindowIcon(QIcon(图片路径))和setStyleSheet('background-image:url(图片路径)')的不同点在于, 路径中包含的斜杠是不同的, 设置Icon的图片路径要用"\" , 而设置背景图片的文件路径要用"/" . 相同点在于都要使用绝对路径 . 建议引入sys库, 然后使用sys.path[0]获取python文件所在路径, 然后再拼接图片路径,  我是这么写的(如下)

MainWindow.setWindowIcon(QIcon('{0}\images\logo.png'.format(sys.path[0])))
self.bgUrl="{0}\images\Background.jpg".format(sys.path[0])
MainWindow.setStyleSheet('background-image:url({0})'.format(self.bgUrl.replace('\\',"/")))
           

        记录学习的点点滴滴, 希望对初学者有所帮助, 也希望跟大家一起进步.