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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

设置 背景颜色和背景图片

首先设置autoFillBackground属性为真

然后定义一个QPalette对象

设置QPalette对象的背景属性(颜色或图片)

最后设置QWidget对象的Palette

实例:

1#-*- coding: utf-8 -*-2importsys3fromPyQt4importQtGui4fromPyQt4.QtGuiimport*5fromPyQt4.QtCoreimport*678classIcon(QtGui.QWidget):9def__init__(self, parent=None):10QtGui.QWidget.__init__(self, parent)11palette1 =QtGui.QPalette(self)12palette1.setColor(self.backgroundRole(), QColor(192,253,123))#设置背景颜色13#palette1.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('../../../Document/images/17_big.jpg'))) # 设置背景图片14self.setPalette(palette1)15self.setAutoFillBackground(True) # 不设置也可以16self.setGeometry(300, 300, 250, 150)17self.setWindowTitle('Icon')18self.setWindowIcon(QtGui.QIcon('../../../Document/images/Firefox.png'))19mylayout =QVBoxLayout()20self.setLayout(mylayout)2122232425app =QtGui.Qapplication(sys.argv)26icon =Icon()27icon.show()28sys.exit(app.exec_())

效果:

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

QPalette 调色板 与QPainter 画板区别

1#-*- coding: UTF8 -*-2fromPyQt4importQtGui3fromPyQt4.QtGuiimport*4importsys56'''7调色板: palette 铺平整个背景 (小于窗体有多个图片)8png 如果有图层,背景为黑色,可图层覆盖9'''10classIcon(QtGui.QWidget):11def__init__(self, parent=None):1213QtGui.QWidget.__init__(self, parent)14self.resize(256, 256)15self.setWindowTitle('Icon')16mylayout =QVBoxLayout()17self.setLayout(mylayout)1819defpaintEvent(self, event):20palette1 =QtGui.QPalette(self)21palette1.setColor(self.backgroundRole(), QColor(192, 253, 123))#设置背景颜色22palette1.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('1.png')))#设置背景图片23self.setPalette(palette1)242526app =QtGui.QApplication(sys.argv)27icon =Icon()28icon.show()29sys.exit(app.exec_())

效果:

1#-*- coding: UTF8 -*-2fromPyQt4.QtGuiimport*3fromPyQt4.QtCoreimport*45'''6绘制QPainter 窗体 显示一个7QPainter默认只能在paintEvent里面调用 否则:QPainter::begin: Paint device returned engine == 0, type: 18'''9classMyForm(QWidget):10def__init__(self,parent=None):11super(MyForm, self).__init__(parent)12self.resize(256, 256)1314defpaintEvent(self, event):15painter =QPainter()16painter.begin(self)17painter.setRenderHint(QPainter.Antialiasing)18painter.setPen(Qt.NoPen)19painter.drawPixmap(0, 0, 256, 256, QPixmap("1.png"))20painter.end()212223app =QApplication([])24form =MyForm()25form.show()26app.exec_()

效果:

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

不规则窗体的显示

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

1self.update()2self.repaint()

代码如下:

1#-*- coding: UTF8 -*-2fromPyQt4.QtGuiimport*3fromPyQt4.QtCoreimport*4importsys56classShapeWidget(QWidget):7def__init__(self,parent=None):8super(ShapeWidget,self).__init__(parent)9self.i = 110self.mypix()11self.timer =QTimer()12self.timer.setInterval(500)#500秒13self.timer.timeout.connect(self.timeChange)14self.timer.start()1516#显示不规则 pic17defmypix(self):18self.update()19ifself.i == 5:20self.i = 121self.mypic = {1:'Left_Button.png', 2:"Up_Button.png", 3:'Right_Button.png', 4:'Down_Button.png'}22self.pix = QPixmap(self.mypic[self.i],"0", Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither)#23self.resize(self.pix.size())24self.setMask(self.pix.mask())#setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分使之看起来是透明的, 它的参数可为一个QBitmap对象或一个QRegion对象,此处调用QPixmap的mask()函数获得图片自身的遮罩,为一个QBitmap对象。实例中使用的是png格式的图片,它的透明部分实际上即是一个遮罩。25self.dragPosition=None2627#重定义鼠标按下响应函数mousePRessEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。28defmousePressEvent(self, event):29ifevent.button() ==Qt.LeftButton:30self.dragPosition = event.globalPos()-self.frameGeometry().topLeft()#保存当前鼠标点所在的位置相对于窗体左上角的偏移值dragPosition,31event.accept()32ifevent.button() ==Qt.RightButton:33self.close()3435defmouseMoveEvent(self, event):36ifevent.buttons() &Qt.LeftButton:37self.move(event.globalPos()-self.dragPosition)#当左键移动窗体修改偏移值38event.accept()39#如何激活 paintEvent 呢? 一般 paintEvent 在窗体首次绘制加载, 要重新加载paintEvent 需要重新加载窗口使用 self.update() or self.repaint()40defpaintEvent(self, event):41painter =QPainter(self)42painter.drawPixmap(0, 0, self.pix.width(),self.pix.height(),self.pix)43#鼠标双击事件44defmouseDoubleClickEvent(self, event):45ifevent.button() == 1:46self.i+=147self.mypix()4849#每**秒修改paint50deftimeChange(self):51self.i+=152self.mypix()5354if__name__=='__main__':55app=QApplication(sys.argv)56form=ShapeWidget()57form.show()58app.exec_()

不规则资源图片:

效果:

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

加载Gif动画效果

1#-*- coding: utf-8 -*-2importsys3fromPyQt4importQtCore,QtGui4classloadingGif(QtGui.QWidget):5def__init__(self,parent=None):6super(loadingGif, self).__init__(parent)7self.label = QtGui.QLabel('', self)8self.setFixedSize(200,200)9self.setWindowFlags(QtCore.Qt.Dialog|QtCore.Qt.CustomizeWindowHint)10self.movie = QtGui.QMovie("loading.gif")11self.label.setMovie(self.movie)12self.movie.start()1314if__name__=='__main__':15app =QtGui.QApplication(sys.argv)16mw =loadingGif()17mw.show()18sys.exit(app.exec_())

效果:

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航