概述
注:系列文章,前后关联,请结合完整代码参考本系列文章;现已开源在 GitHub PyOc
文章目录
- 参考链接
- 准备
- 注意(窗口抖动严重?)
- 核心代码
- 设置背景图片(网络、本地)
- 图片自适应
参考链接
-
pyqt窗口背景图片自适应大小
-
Qt三种方式实现背景色和背景图(都可放缩,qss方式也可以)
-
Qt根据QLabel的大小调整图片的大小
-
Bilinear Filter(双线性滤波转换)
准备
要想让背景图片跟随窗口动态改变大小需要用到:
-
方法
scaled(Qsize, aspectRatioMode, transformMode)
或
scaled(int width, int height, aspectRatioMode, transformMode)
-
size 目标大小
-
aspectRatioMode 长宽比模式
-
transformMode 图片转换模式
-
-
事件
void QWidget::resizeEvent(QResizeEvent *event)
注意(窗口抖动严重?)
因为本例使用的图片转换模式为 双线性过滤转换 SmoothTransformation
,转换速度会稍慢但画质更好,
可以改为使用 Qt.FastTransformation
核心代码
设置背景图片(网络、本地)
def set_bg(self, image):
"""设置本地背景图片
形参 image 可以是 QPixmap 实例、资源路径或磁盘路径。
"""
if type(image) == QPixmap:
self._bgimg = image
elif type(image) == str:
image = image.strip()
if image[:4] == 'http':
logging.warning("set_bg(self, image: Union[QPixmap, path])" +
"n: The argument 1 is a URL like, you might want to use" +
" set_web_bg(self, url, params=None, **kwargs).")
self.set_web_bg(image)
return None
elif not image:
logging.warning("set_bg(self, image: Union[QPixmap, path])" +
"n: The argument 1 is null.")
return None
elif not exists(image) and image[:2] != ':/':
logging.warning("set_bg(self, image: Union[QPixmap, path])" +
"n: The file '{}' is inexistence.".format(image))
return None
image = QPixmap(image)
self._bgimg = image
else:
return None
adapt_image = self._adapt_bg(self._bgimg)
palette = QPalette()
palette.setBrush(QPalette.Window, QBrush(adapt_image))
self.setPalette(palette)
def set_web_bg(self, url, params=None, **kwargs):
"""使用 requests.get 加载来自网络的背景图片"""
if url[:4] == 'http':
try:
response = get(url, params=None, **kwargs)
except Exception as e:
loggin.warning('Error: OcGui.OWindow.set_web_bg, ', e)
return False
else:
img = QPixmap()
img.loadFromData(response.content)
self._bgimg = img
palette = QPalette()
adapt = self._adapt_bg(img)
palette.setBrush(QPalette.Window, QBrush(adapt))
self.setPalette(palette)
return True
图片自适应
def _adapt_bg(self, image):
"""返回适应窗口大小的背景图片"""
image = image.scaled(self.width(), self.height(),
Qt.KeepAspectRatioByExpanding,
Qt.SmoothTransformation)
return image
def resizeEvent(self, event):
"""重写窗口大小改变事件,实现自适应背景图片"""
if not self._bgimg:
return None
palette = QPalette()
img = self._adapt_bg(self._bgimg)
palette.setBrush(QPalette.Window, QBrush(img))
self.setPalette(palette)
本文为 one-ccs 原创文章,引用必须注明出处!
https://blog.csdn.net/qq_43155814/article/details/104689104
上一篇:【PyQt】实战 Super Spider 之拖动改变窗口大小
最后
以上就是愤怒期待为你收集整理的【PyQt】自适应背景图片的全部内容,希望文章能够帮你解决【PyQt】自适应背景图片所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复