PyQt5之如何设置QWidget窗口背景图片问题
作者:EUNC
这篇文章主要介绍了PyQt5之如何设置QWidget窗口背景图片问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
PyQt5设置QWidget窗口背景图片
QWidget 添加背景图片问题
QWidget 创建的窗口有时并不能直接用 setStyleSheet 设置窗口部分样式
比如背景图,在Qt Designer 设置好背景图样式了 QWidget#Form{ … } 并能看到效果
但转为 python3 代码后,运行程序显示不了这个背景图
如果样式使用的是 background-image 就好办了,
直接使用下面代码替换,即使用 QPalette 控件重新画背景图
palette = QPalette() palette.setBrush(QPalette.Background, QBrush(QPixmap(":/pic/images/sysBackground.jpg"))) self.setPalette(palette)
QSS 背景图样式区别
background-image
: 背景图,默认原图大小,窗口空余部分填充此背景图border-image
: 默认跟随窗口大小进行拉伸image
: 默认原图大小,窗口空余部分不补充
PyQt设置窗口背景图像,以及图像自适应窗口大小变化
第一次用PyQt, 由于之前已经用了一段时间的Python,种种原因需要做界面,搜了网上很多攻略,选择了最简单的一个方法,下载PyQt5和pyqt5_tools。具体的配置这里不详细说了。
配置好之后通过如下界面点击Qt Design(自己起的名)调用QT:
点击之后创建QtWidgets的界面(test是自己起的名):
此时点击保存,选择当前工程的路径,工程目录下会多一个.ui文件,此时右击该ui文件:
利用pyuic把ui文件转换成Python代码:
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName(“Form”) Form.resize(400, 300) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(0, 0, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Link, brush) brush = QtGui.QBrush(QtGui.QColor(255, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.LinkVisited, brush) brush = QtGui.QBrush(QtGui.QColor(255, 85, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Link, brush) brush = QtGui.QBrush(QtGui.QColor(255, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.LinkVisited, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Link, brush) brush = QtGui.QBrush(QtGui.QColor(255, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.LinkVisited, brush) Form.setPalette(palette) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate(“Form”, “Form”))
此时新建文件login.py:
from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap,QPainter from test import Ui_Form import numpy as np import sys class mywindow(Ui_Form, QWidget): def init(self): super(mywindow, self).init() self.setupUi(self) self.num = np.random.randint(10) self.setWindowTitle(‘行人检测') print(self.num) def paintEvent(self, event):# set background_img painter = QPainter(self) painter.drawRect(self.rect()) pixmap = QPixmap("./img/1.jpg")#换成自己的图片的相对路径 painter.drawPixmap(self.rect(), pixmap) if name == ‘main': app = QApplication(sys.argv) w = mywindow() w.paintEngine() w.show() sys.exit(app.exec_())
结果:
全屏:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。