改写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_())
我觉得我的变量名和函数名,应该起的还可以,所以没有注释也能看懂吧。。
- 改写linux窗口程序设计的Qt例子
- 改写linux窗口程序设计的Qt例子(2)
- 改写linux窗口程序设计的Qt例子(3)
- 改写linux窗口程序设计的Qt例子(4)
- 改写linux窗口程序设计的Qt例子(5)
- 改写linux窗口程序设计的Qt例子(6)
- 改写linux窗口程序设计的Qt例子(7)
- netfilter例子改写2
- QT 主窗口程序设计
- 改写spring的例子petclinic
- 改写书上过期的例子
- 用python3+PyQt5改写Python Qt GUI快速编程的第6章实例主窗口
- Qt libqevdevtouchplugin.so插件的改写
- Qt学习2——对话框改写
- Linux程序设计(Linux shell编程的例子:倒计时程序)
- Linux程序设计(Linux shell编程的例子:选择菜单)
- Linux程序设计(Linux shell编程的例子:总结)
- qt creator在原窗口基础上新建窗口,inpaint例子的修改
- struct结构体中定义构造函数和析构函数
- MAC地址与IP地址的区别
- 【黑马程序员】java正则表达式的学习和总结
- 整理生命
- mac下搭建本地svn服务器
- 改写linux窗口程序设计的Qt例子(2)
- 动态创建多维数组——才不简单
- Java日期格式化
- Python Tkinter编程 OptionMenu类
- 网上流传判断ArcEngine runtime是否安装的代码中的错误。
- 001控制窗体大小
- 互联网公司智力题
- mysql命令行以及mysql workbence查询结果中文乱码的解决方法
- (转)国外软件外包项目网站(适用软件兼职)