【PyQt实例6】渐变效果
来源:互联网 发布:结婚礼物 知乎 编辑:程序博客网 时间:2024/06/05 18:26
#-*- coding:utf-8 -*-
import sys
import math
from PyQt4.QtCore import *
from PyQt4.QtGui import *
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf-8"))
class StockDialog(QWidget):
def __init__(self, parent=None):
super(StockDialog, self).__init__(parent)
self.setWindowTitle(self.tr("渐变效果"))
self.startColor = Qt.green
self.endColor = Qt.blue
self.style = QGradient.LinearGradient
self.spread = QGradient.PadSpread
mainSplitter = QSplitter(Qt.Horizontal)
mainSplitter.setOpaqueResize(True)
frame = QFrame(mainSplitter)
mainLayout = QGridLayout(frame)
mainLayout.setMargin(10)
mainLayout.setSpacing(6)
stack1 = QStackedWidget()
stack1.setFrameStyle(QFrame.Panel|QFrame.Raised)
mainSplitter1 = QSplitter(Qt.Horizontal)
mainSplitter1.setOpaqueResize(True)
self.area = PaintArea(self)
stack1.addWidget(self.area)
frame1 = QFrame(mainSplitter1)
mainLayout1 = QVBoxLayout(frame1)
mainLayout1.setMargin(10)
mainLayout1.setSpacing(6)
mainLayout1.addWidget(stack1)
self.startPushButton = QPushButton(self.tr("start"))
self.startPushButton.setAutoFillBackground(True)
self.startPushButton.setPalette(QPalette(Qt.green))
self.endPushButton = QPushButton(self.tr("end"))
self.endPushButton.setAutoFillBackground(True)
self.endPushButton.setPalette(QPalette(Qt.blue))
self.connect(self.startPushButton,SIGNAL("clicked()"),self.slotStartColor)
self.connect(self.endPushButton,SIGNAL("clicked()"),self.slotEndColor)
self.grdientComboBox = QComboBox()
self.grdientComboBox.addItem(self.tr("Linear Gradient"),QGradient.LinearGradient)
self.grdientComboBox.addItem(self.tr("Radial Gradient"),QGradient.RadialGradient)
self.grdientComboBox.addItem(self.tr("Conical Gradient"),QGradient.ConicalGradient)
self.connect(self.grdientComboBox,SIGNAL("activated(int)"),self.slotSetStyle)
self.spreadComboBox = QComboBox()
self.spreadComboBox.addItem(self.tr("PadSpread"),QGradient.PadSpread)
self.spreadComboBox.addItem(self.tr("RepeatSpread"),QGradient.RepeatSpread)
self.spreadComboBox.addItem(self.tr("ReflctSpread"),QGradient.ReflectSpread)
self.connect(self.spreadComboBox,SIGNAL("activated(int)"),self.slotSetSpread)
mainLayout.addWidget(self.startPushButton,1,0)
mainLayout.addWidget(self.endPushButton,1,1)
mainLayout.addWidget(self.grdientComboBox,1,2)
mainLayout.addWidget(self.spreadComboBox,1,3)
layout = QGridLayout(self)
layout.addWidget(mainSplitter1,0,0)
layout.addWidget(mainSplitter,1,0)
self.setLayout(layout)
def slotStartColor(self):
self.startColor = QColorDialog.getColor(Qt.green)
self.startPushButton.setPalette(QPalette(self.startColor))
self.area.setPen(QPen(self.startColor))
def slotEndColor(self):
self.endColor = QColorDialog.getColor(Qt.blue)
self.endPushButton.setPalette(QPalette(self.endColor))
self.area.setPen(QPen(self.endColor))
def slotSetStyle(self,value):
self.style = self.grdientComboBox.itemData(value,Qt.UserRole).toInt()[0]
def slotSetSpread(self,value):
self.spread = self.spreadComboBox.itemData(value,Qt.UserRole).toInt()[0]
class PaintArea(QWidget):
def __init__(self,StockDialog):
super(PaintArea,self).__init__()
self.setPalette(QPalette(Qt.white))
self.setAutoFillBackground(True)
self.setMinimumSize(400,400)
self.startPoint = QPointF(0,0)
self.endPoint = QPointF(400,400)
self.pen = QPen()
self.sd = StockDialog
def setPen(self,p):
self.pen = p
self.update()
def mousePressEvent(self,e):
self.startPoint = QPointF(e.pos())
def mouseReleaseEvent(self,e):
self.endPoint = QPointF(e.pos())
self.update()
def paintEvent(self,QPaintEvent):
p = QPainter(self)
r = self.rect()
p.setPen(self.pen)
if(self.sd.style == QGradient.LinearGradient):
linearGradient = QLinearGradient(self.startPoint,self.endPoint)
linearGradient.setColorAt(0.0,self.sd.startColor)
linearGradient.setColorAt(1.0,self.sd.endColor)
linearGradient.setSpread(self.sd.spread)
p.setBrush(linearGradient)
elif(self.sd.style == QGradient.RadialGradient):
rr = math.sqrt(math.pow(self.endPoint.x() - self.startPoint.x(),2) + math.pow(self.endPoint.y() - self.startPoint.y(),2))
radialGradient = QRadialGradient(self.startPoint,rr,self.startPoint)
radialGradient.setColorAt(0.0,self.sd.startColor)
radialGradient.setColorAt(1.0,self.sd.endColor)
radialGradient.setSpread(self.sd.spread)
p.setBrush(radialGradient)
elif(self.sd.style == QGradient.ConicalGradient):
angle = math.atan2(self.endPoint.y() - self.startPoint.y(),self.endPoint.x() - self.startPoint.x())
conicalGradient = QConicalGradient(self.startPoint,-(180 * angle)/math.pi)
conicalGradient.setColorAt(0.0,self.sd.startColor)
conicalGradient.setColorAt(1.0,self.sd.endColor)
p.setBrush(conicalGradient)
p.drawRect(r)
if __name__=='__main__':
app = QApplication(sys.argv)
form = StockDialog()
form.show()
app.exec_()
import sys
import math
from PyQt4.QtCore import *
from PyQt4.QtGui import *
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf-8"))
class StockDialog(QWidget):
def __init__(self, parent=None):
super(StockDialog, self).__init__(parent)
self.setWindowTitle(self.tr("渐变效果"))
self.startColor = Qt.green
self.endColor = Qt.blue
self.style = QGradient.LinearGradient
self.spread = QGradient.PadSpread
mainSplitter = QSplitter(Qt.Horizontal)
mainSplitter.setOpaqueResize(True)
frame = QFrame(mainSplitter)
mainLayout = QGridLayout(frame)
mainLayout.setMargin(10)
mainLayout.setSpacing(6)
stack1 = QStackedWidget()
stack1.setFrameStyle(QFrame.Panel|QFrame.Raised)
mainSplitter1 = QSplitter(Qt.Horizontal)
mainSplitter1.setOpaqueResize(True)
self.area = PaintArea(self)
stack1.addWidget(self.area)
frame1 = QFrame(mainSplitter1)
mainLayout1 = QVBoxLayout(frame1)
mainLayout1.setMargin(10)
mainLayout1.setSpacing(6)
mainLayout1.addWidget(stack1)
self.startPushButton = QPushButton(self.tr("start"))
self.startPushButton.setAutoFillBackground(True)
self.startPushButton.setPalette(QPalette(Qt.green))
self.endPushButton = QPushButton(self.tr("end"))
self.endPushButton.setAutoFillBackground(True)
self.endPushButton.setPalette(QPalette(Qt.blue))
self.connect(self.startPushButton,SIGNAL("clicked()"),self.slotStartColor)
self.connect(self.endPushButton,SIGNAL("clicked()"),self.slotEndColor)
self.grdientComboBox = QComboBox()
self.grdientComboBox.addItem(self.tr("Linear Gradient"),QGradient.LinearGradient)
self.grdientComboBox.addItem(self.tr("Radial Gradient"),QGradient.RadialGradient)
self.grdientComboBox.addItem(self.tr("Conical Gradient"),QGradient.ConicalGradient)
self.connect(self.grdientComboBox,SIGNAL("activated(int)"),self.slotSetStyle)
self.spreadComboBox = QComboBox()
self.spreadComboBox.addItem(self.tr("PadSpread"),QGradient.PadSpread)
self.spreadComboBox.addItem(self.tr("RepeatSpread"),QGradient.RepeatSpread)
self.spreadComboBox.addItem(self.tr("ReflctSpread"),QGradient.ReflectSpread)
self.connect(self.spreadComboBox,SIGNAL("activated(int)"),self.slotSetSpread)
mainLayout.addWidget(self.startPushButton,1,0)
mainLayout.addWidget(self.endPushButton,1,1)
mainLayout.addWidget(self.grdientComboBox,1,2)
mainLayout.addWidget(self.spreadComboBox,1,3)
layout = QGridLayout(self)
layout.addWidget(mainSplitter1,0,0)
layout.addWidget(mainSplitter,1,0)
self.setLayout(layout)
def slotStartColor(self):
self.startColor = QColorDialog.getColor(Qt.green)
self.startPushButton.setPalette(QPalette(self.startColor))
self.area.setPen(QPen(self.startColor))
def slotEndColor(self):
self.endColor = QColorDialog.getColor(Qt.blue)
self.endPushButton.setPalette(QPalette(self.endColor))
self.area.setPen(QPen(self.endColor))
def slotSetStyle(self,value):
self.style = self.grdientComboBox.itemData(value,Qt.UserRole).toInt()[0]
def slotSetSpread(self,value):
self.spread = self.spreadComboBox.itemData(value,Qt.UserRole).toInt()[0]
class PaintArea(QWidget):
def __init__(self,StockDialog):
super(PaintArea,self).__init__()
self.setPalette(QPalette(Qt.white))
self.setAutoFillBackground(True)
self.setMinimumSize(400,400)
self.startPoint = QPointF(0,0)
self.endPoint = QPointF(400,400)
self.pen = QPen()
self.sd = StockDialog
def setPen(self,p):
self.pen = p
self.update()
def mousePressEvent(self,e):
self.startPoint = QPointF(e.pos())
def mouseReleaseEvent(self,e):
self.endPoint = QPointF(e.pos())
self.update()
def paintEvent(self,QPaintEvent):
p = QPainter(self)
r = self.rect()
p.setPen(self.pen)
if(self.sd.style == QGradient.LinearGradient):
linearGradient = QLinearGradient(self.startPoint,self.endPoint)
linearGradient.setColorAt(0.0,self.sd.startColor)
linearGradient.setColorAt(1.0,self.sd.endColor)
linearGradient.setSpread(self.sd.spread)
p.setBrush(linearGradient)
elif(self.sd.style == QGradient.RadialGradient):
rr = math.sqrt(math.pow(self.endPoint.x() - self.startPoint.x(),2) + math.pow(self.endPoint.y() - self.startPoint.y(),2))
radialGradient = QRadialGradient(self.startPoint,rr,self.startPoint)
radialGradient.setColorAt(0.0,self.sd.startColor)
radialGradient.setColorAt(1.0,self.sd.endColor)
radialGradient.setSpread(self.sd.spread)
p.setBrush(radialGradient)
elif(self.sd.style == QGradient.ConicalGradient):
angle = math.atan2(self.endPoint.y() - self.startPoint.y(),self.endPoint.x() - self.startPoint.x())
conicalGradient = QConicalGradient(self.startPoint,-(180 * angle)/math.pi)
conicalGradient.setColorAt(0.0,self.sd.startColor)
conicalGradient.setColorAt(1.0,self.sd.endColor)
p.setBrush(conicalGradient)
p.drawRect(r)
if __name__=='__main__':
app = QApplication(sys.argv)
form = StockDialog()
form.show()
app.exec_()
0 0
- 【PyQt实例6】渐变效果
- 渐变效果
- 渐变效果
- 渐变效果
- 渐变效果
- 渐变效果
- [Android实例] 渐变标题栏效果(具体看效果图)
- LinearGradient在android开发中实现字体渐变效果实例
- Core Animation实例-图片折叠效果(CAGradientLayer渐变层)
- QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
- PyQt精彩实例地址
- 转:pyqt实例
- 【Pyqt实例16】自定义model
- 【PyQt 实例17】柱状统计图
- 渐变效果进度条
- 图片渐变轮换效果
- 图片渐变轮换效果
- 图片渐变轮换效果
- UPC:2526 Color the necklace
- java项目组月度考核表(KPI)
- mysql查询字段为null的方法
- Apache Tajo™ - An open source big data warehouse system in Hadoop
- java编码终极探秘
- 【PyQt实例6】渐变效果
- iOS 沙盒 理解 文件系统
- AS3.0 Bitmap类实现图片3D旋转效果
- 用cmd来运行java
- 汉字的编码与字模点阵小结
- OpenCV2马拉松第3圈——改变对比度和亮度
- MVC 帮助类/公共方法
- 在Jenkins 运行 cucumber(ruby+watir)
- java--多线程通信