Pyqt 设置 背景颜色和背景图片、 QPalette 调色板 与QPainter 画板区别 、 不规则图片

时间:2022-10-26 23:53:03

设置 背景颜色和背景图片

首先设置autoFillBackground属性为真
然后定义一个QPalette对象
设置QPalette对象的背景属性(颜色或图片)
最后设置QWidget对象的Palette

实例:

 # -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui
from PyQt4.QtGui import *
from PyQt4.QtCore import * class Icon(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
palette1 = QtGui.QPalette(self)
palette1.setColor(self.backgroundRole(), QColor(192,253,123)) # 设置背景颜色
# palette1.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('../../../Document/images/17_big.jpg'))) # 设置背景图片
self.setPalette(palette1)
self.setAutoFillBackground(True) # 不设置也可以
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('../../../Document/images/firefox.png'))
mylayout = QVBoxLayout()
self.setLayout(mylayout) app = QtGui.QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())

效果:

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

---------------------------------------------------------------------------------------

QPalette 调色板  与QPainter 画板区别

 # -*- coding: UTF8 -*-
from PyQt4 import QtGui
from PyQt4.QtGui import *
import sys '''
调色板: palette 铺平整个背景 (小于窗体有多个图片)
png 如果有图层,背景为黑色,可图层覆盖
'''
class Icon(QtGui.QWidget):
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent)
self.resize(256, 256)
self.setWindowTitle('Icon')
mylayout = QVBoxLayout()
self.setLayout(mylayout) def paintEvent(self, event):
palette1 = QtGui.QPalette(self)
palette1.setColor(self.backgroundRole(), QColor(192, 253, 123)) # 设置背景颜色
palette1.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('1.png'))) # 设置背景图片
self.setPalette(palette1) app = QtGui.QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())

效果:

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

 # -*- coding: UTF8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import * '''
绘制QPainter 窗体 显示一个
QPainter默认只能在paintEvent里面调用 否则:QPainter::begin: Paint device returned engine == 0, type: 1
'''
class MyForm(QWidget):
def __init__(self,parent=None):
super(MyForm, self).__init__(parent)
self.resize(256, 256) def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(Qt.NoPen)
painter.drawPixmap(0, 0, 256, 256, QPixmap("1.png"))
painter.end() app = QApplication([])
form = MyForm()
form.show()
app.exec_()

效果:

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

--------------------------------------------------------------------------------------------------------------------------

不规则窗体的显示

pyqt 的显示不规则图片主要注意两点
1. 图片的遮盖物mask
pixmap.setMask() etMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分使之看起来是透明的, 它的参数可为一个QBitmap对象或一个QRegion对象,此处调用QPixmap的mask()函数获得图片自身的遮罩,为一个QBitmap对象
2. 如何激活paintEvent
paintEvent 每次初始化窗体只调用一次,导致chang不规则图片的时候遮盖物不修改,所以要每修改次图片就激活一次paintEvent事件
激活的方法是更新窗体或重新绘制

通过Qtimer 每隔*/秒  self.connect(self.timer,SIGNAL("timeout()"),self.timeChang)   触发update

 self.update()
self.repaint()

代码如下:

 # -*- coding: UTF8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys class ShapeWidget(QWidget):
def __init__(self,parent=None):
super(ShapeWidget,self).__init__(parent)
self.i = 1
self.mypix()
self.timer = QTimer()
self.timer.setInterval(500) # 500秒
self.timer.timeout.connect(self.timeChange)
self.timer.start() # 显示不规则 pic
def mypix(self):
self.update()
if self.i == 5:
self.i = 1
self.mypic = {1: 'Left_Button.png', 2: "Up_Button.png", 3: 'Right_Button.png', 4: 'Down_Button.png'}
self.pix = QPixmap(self.mypic[self.i], "", Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither) #
self.resize(self.pix.size())
self.setMask(self.pix.mask()) #setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分使之看起来是透明的, 它的参数可为一个QBitmap对象或一个QRegion对象,此处调用QPixmap的mask()函数获得图片自身的遮罩,为一个QBitmap对象。实例中使用的是png格式的图片,它的透明部分实际上即是一个遮罩。
self.dragPosition=None #重定义鼠标按下响应函数mousePressEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.dragPosition = event.globalPos()-self.frameGeometry().topLeft() #保存当前鼠标点所在的位置相对于窗体左上角的偏移值dragPosition,
event.accept()
if event.button() == Qt.RightButton:
self.close() def mouseMoveEvent(self, event):
if event.buttons() & Qt.LeftButton:
self.move(event.globalPos()-self.dragPosition) # 当左键移动窗体修改偏移值
event.accept()
# 如何激活 paintEvent 呢? 一般 paintEvent 在窗体首次绘制加载, 要重新加载paintEvent 需要重新加载窗口使用 self.update() or self.repaint()
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(0, 0, self.pix.width(),self.pix.height(),self.pix)
# 鼠标双击事件
def mouseDoubleClickEvent(self, event):
if event.button() == 1:
self.i+=1
self.mypix() #每**秒修改paint
def timeChange(self):
self.i+=1
self.mypix() if __name__ == '__main__':
app=QApplication(sys.argv)
form=ShapeWidget()
form.show()
app.exec_()

不规则资源图片:

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

效果:

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

---------------------------------------------------------------------------------------------

加载Gif动画效果

 # -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore,QtGui
class loadingGif(QtGui.QWidget):
def __init__(self,parent=None):
super(loadingGif, self).__init__(parent)
self.label = QtGui.QLabel('', self)
self.setFixedSize(200,200)
self.setWindowFlags(QtCore.Qt.Dialog|QtCore.Qt.CustomizeWindowHint)
self.movie = QtGui.QMovie("loading.gif")
self.label.setMovie(self.movie)
self.movie.start() if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mw = loadingGif()
mw.show()
sys.exit(app.exec_())

效果:

Pyqt  设置 背景颜色和背景图片、 QPalette 调色板  与QPainter 画板区别 、 不规则图片

Pyqt 设置 背景颜色和背景图片、 QPalette 调色板 与QPainter 画板区别 、 不规则图片的更多相关文章

  1. Android TextView背景颜色与背景图片设置

    Android TextView 背景颜色与背景图片设置,android textview 控件,android textview 背景, android textview 图片,android te ...

  2. css背景颜色、背景图片,以及列表的多种样式

    背景样式 • background-color 设置元素的背景颜色.• background-image 把图像设置为背景.• background-position 设置背景图像的起始位置.• ba ...

  3. Swift自定义UINavigationController(背景颜色、背景图片、返回按钮设置、字体大小等)

    1.0  自定义UINavigationController时,背景图片.颜色等只需要设置一次,所以我们可以重写  initializa  这个方法来实现我们想要的效果 override  class ...

  4. iOS 8 设置导航栏的背景颜色和背景图片

    假设是storyboard 直接embed一个导航栏.然后在新出现的导航栏 选属性 选一下颜色就能够了 代码实现背景颜色改动:self.navigationController.navigationB ...

  5. CSS背景颜色、背景图片、平铺、定位、固定

    CSS背景颜色设置 background-color:red;如设置背景颜色为红色: 背景颜色设置支持3种写法: 颜色名 16进制 rgb CSS背景图片颜色设置 background-image:u ...

  6. Java 给 PowerPoint 文档添加背景颜色和背景图片

    在制作Powerpoint文档时,背景是非常重要的,统一的背景能让Powerpoint 演示文稿看起来更加干净美观.本文将详细讲述如何在Java应用程序中使用免费的Free Spire.Present ...

  7. 批量提取图片主要3个颜色匹配中文名字并写入到excel设置对应颜色的背景

    from gevent import monkey monkey.patch_all() import gevent from haishoku.haishoku import Haishoku im ...

  8. Swift - 修改导航栏的样式(文字颜色,背景颜色,背景图片)

    默认情况,导航栏UINavigationController的样式如下,如果想要使用代码修改样式也是比较简单的. 1,修改导航栏背景色 1 2 3 //修改导航栏背景色 self.navigation ...

  9. css让背景颜色与背景图片同时显示

    background:url(../images/bg02.png) #25282e left top no-repeat;

随机推荐

  1. FineUI第十五天---表格概述

    Grid表格概述  跟Asp.Net的差不多. 下面介绍一些属性:  ExpandUnusedSpace:此列充满所有的剩余空间,并且随着表格宽度变化而变化 DataToolTipField:用来显示 ...

  2. java 14 -6 BigInteger和BigDecimal

    BigInteger:可以让超过Integer范围内的数据进行运算 构造方法: BigInteger(String val) import java.math.BigInteger; public c ...

  3. Change ICON of MFC Application and Dialog

    Change ICON of MFC Application and Dialoghttp://www.codeproject.com/Tips/406870/Change-ICON-of-MFC-A ...

  4. md5sum 生成 经md5加密后的字符串

    ➜ ~ echo -n 'admin' | md5sum 21232f297a57a5a743894a0e4a801fc3 - ➜ ~ md5sum -h md5sum: invalid option ...

  5. Java核心 --- 泛型

    CoreJava 泛型 java泛型的出现避免了强制类型转换,便于代码更好的被阅读 本文的写作参照了张孝祥的泛型介绍:http://www.itcast.cn/news/dbfd20f1/f4b1/4 ...

  6. linux系统使用密钥登录设置

    使用密钥登录linux的操作步骤(使用putty): 1.用putty远程登录linux服务器,然后使用puttygen生成密钥,将生成的密钥保存,保存私钥将公钥复制保存到linux服务器的autho ...

  7. findbugs的ant脚本实践

    <?xml version="1.0" encoding="UTF-8"?> <project name="codeCheck&qu ...

  8. C&num;字典转换成where条件

    where 1=1 and Dictionary[key1]=Dictionary[value1] and Dictionary[key2]=Dictionary[value3].... /// &l ...

  9. O2O淘宝优惠券代码总结

    一.数据集预处理 1.数据读入 import pandas as pd import numpy as np import datetime as date import datetime as dt ...

  10. storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3

    Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...