改写linux窗口程序设计的Qt例子(2)

来源:互联网 发布:黑米软件新闻 编辑:程序博客网 时间:2024/05/22 13:49

第三十三个例子:渐变效果

环境 Python3.3 PySide

IDE PyCharm

__author__ = '375159507@qq.com'try:    from PySide import QtGui    from PySide import QtCoreexcept ImportError:    from PyQt4 import QtGui    from PyQt4 import QtCoreclass PainArea(QtGui.QWidget):    def __init__(self):        super(PainArea,self).__init__()        self.setPalette(QtCore.Qt.white)        self.setAutoFillBackground(True)        self.setMinimumSize(400,400)        self.starPoint = QtCore.QPoint(0,0)        self.endPoint = QtCore.QPoint(400,400)        self.gradientWay = QtGui.QGradient.LinearGradient        self.startColor = QtCore.Qt.red        self.endColor = QtCore.Qt.blue        self.spreadWay = QtGui.QGradient.PadSpread    def setStarColor(self,newColor):        self.startColor = newColor    def setEndColor(self,newColor):        self.endColor = newColor    def setSpreadWay(self,newWay):        self.spreadWay = newWay    def setGradientWay(self,newWay):        self.gradientWay = newWay    def mousePressEvent(self, e):        self.starPoint = e.pos()    def mouseReleaseEvent(self, e):        self.endPoint = e.pos()        self.update()    def paintEvent(self, e):        p = QtGui.QPainter(self)        r = self.rect()        if self.gradientWay == QtGui.QGradient.LinearGradient:            linearGradient = QtGui.QLinearGradient(self.starPoint,self.endPoint)            linearGradient.setColorAt(0.0,self.startColor)            linearGradient.setColorAt(1.0,self.endColor)            linearGradient.setSpread(self.spreadWay)            p.setBrush(linearGradient)        if self.gradientWay == QtGui.QGradient.RadialGradient:            import math            rr = math.sqrt(math.pow(self.endPoint.x()-self.starPoint.x(),2) -math.pow(self.endPoint.y()-self.starPoint.y(),2))            radialGradient = QtGui.QRadialGradient(self.starPoint,rr,self.endPoint)            radialGradient.setColorAt(0.0,self.startColor)            radialGradient.setColorAt(1.0,self.endColor)            p.setBrush(radialGradient)        if self.gradientWay == QtGui.QGradient.ConicalGradient:            import math            angle = math.atan2(math.fabs(self.endPoint.y()-self.starPoint.y(),self.endPoint.x()-self.starPoint.x()))            conicalGradient = QtGui.QConicalGradient(self.starPoint,-(180*angle)/math.pi)            conicalGradient.setColorAt(0.0,self.startColor)            conicalGradient.setColorAt(1.0,self.endColor)            p.setBrush(conicalGradient)        p.drawRect(r)class MainWindow(QtGui.QWidget):    def __init__(self):        super(MainWindow,self).__init__()        self.area = PainArea()        self.createwindow()        self.mainLayout()    def slotStarColor(self):        newColor = QtGui.QColorDialog.getColor()        if newColor:            self.startColor.setPalette(QtGui.QPalette(newColor))            self.area.setStarColor(newColor)    def slotEndColor(self):        newColor = QtGui.QColorDialog.getColor()        if newColor:            self.endColor.setPalette(QtGui.QPalette(newColor))            self.area.setEndColor(newColor)    def slotGradientWay(self,index):        activedindx = index        if activedindx == -1:            return        setWay = self.gradientWay.itemData(activedindx)        self.area.setGradientWay(setWay)    def slotSpreadWay(self,index):        activedindx = index        if activedindx == -1:            return        setWay = self.spreadWay.itemData(activedindx)        self.area.setSpreadWay(setWay)    def createwindow(self):        self.startColor = QtGui.QFrame()        self.startColor.setPalette(QtGui.QPalette(QtCore.Qt.red))        self.startColor.setAutoFillBackground(True)        self.starPushButton = QtGui.QPushButton("起点颜色")        self.starPushButton.clicked.connect(self.slotStarColor)        self.endColor = QtGui.QFrame()        self.endColor.setPalette(QtGui.QPalette(QtCore.Qt.blue))        self.endColor.setAutoFillBackground(True)        self.endPushButton = QtGui.QPushButton("终点颜色")        self.endPushButton.clicked.connect(self.slotEndColor)        self.gradientWay = QtGui.QComboBox()        self.gradientWay.addItem("Linear Gradient",QtGui.QGradient.LinearGradient)        self.gradientWay.addItem("Conical Gradient",QtGui.QGradient.ConicalGradient)        self.gradientWay.addItem("Radial Gradient",QtGui.QGradient.RadialGradient)        self.gradientWay.currentIndexChanged.connect(self.slotGradientWay)        self.spreadWay = QtGui.QComboBox()        self.spreadWay.addItem("PadSpread",QtGui.QGradient.PadSpread)        self.spreadWay.addItem("RepeatSpread",QtGui.QGradient.RepeatSpread)        self.spreadWay.currentIndexChanged.connect(self.slotSpreadWay)    def mainLayout(self):        self.downlayout = QtGui.QGridLayout()        self.downlayout.addWidget(self.startColor,0,0)        self.downlayout.addWidget(self.starPushButton,0,1)        self.downlayout.addWidget(self.gradientWay,0,2)        self.downlayout.addWidget(self.endColor,1,0)        self.downlayout.addWidget(self.endPushButton,1,1)        self.downlayout.addWidget(self.spreadWay,1,2)        self.uplayout = QtGui.QHBoxLayout()        self.uplayout.addWidget(self.area)        self.mainlayout = QtGui.QVBoxLayout()        self.mainlayout.addLayout(self.uplayout)        self.mainlayout.addLayout(self.downlayout)        self.setLayout(self.mainlayout)if __name__ == "__main__":    import  sys    app = QtGui.QApplication(sys.argv)    mainwindow = MainWindow()    mainwindow.show()    sys.exit(app.exec_())

我觉得我的变量名和函数名,应该起的还可以,所以没有注释也能看懂吧。。


原创粉丝点击