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

首先声明,如果转载请声明作者以及来源

第三十四例:QPainter 坐标系的变形

__author__ = '375159507@qq.com'
try:
    from PySide import QtGui
    from PySide import  QtCore
except ImportError:
    from  PyQt4 import QtGui
    from  PyQt4 import QtCore

class PainArea(QtGui.QWidget):
    def __init__(self):
        super(PainArea,self).__init__()
        self.setPalette(QtGui.QPalette(QtCore.Qt.white))
        self.setAutoFillBackground(True)
        self.setMinimumSize(400,400)

        self.scale = 1
        self.angle = 0
        self.translate =0
        self.shear = 0
    def setScale(self,x):
        self.scale = x/5.0
        self.update()

    def setTranslate(self,x):
        self.translate = x
        self.update()

    def setRotate(self,x):
        self.angle = x
        self.update()

    def setShear(self,x):
        self.shear = (x-10.0)/10.0
        self.update()
    def paintEvent(self,e):
        p = QtGui.QPainter(self)
        p.translate(200,200)

        path = QtGui.QPainterPath()
        path.addRect(-100,-50,200,100)
        p.rotate(self.angle)
        p.scale(self.scale,self.scale)
        p.translate(self.translate,self.translate)
        p.shear(self.shear,self.shear)
        p.setPen(QtCore.Qt.red)
        p.drawLine(0,0,150,0)
        p.drawLine(148,-2,150,0)
        p.drawLine(148,2,150,0)
        p.drawText(150,2,"X")
        p.drawLine(0,0,0,150)
        p.drawLine(-2,148,0,150)
        p.drawLine(2,148,0,150)
        p.drawText(2,150,"Y")
        p.setPen(QtCore.Qt.blue)
        p.drawPath(path)


class MainWindow(QtGui.QWidget):
    def __init__(self):
        super(MainWindow,self).__init__()
        self.area = PainArea()
        self.createwindow()
    def slotRotate(self,x):
        self.area.setRotate(x)

    def slotScale(self,x):
        self.area.setScale(x)

    def slotTranslate(self,x):
        self.area.setTranslate(x)

    def slotShear(self,x):
        self.area.setShear(x)

    def createwindow(self):
        self.rotatetext = QtGui.QLabel("旋转")
        self.rotatetspinbox = QtGui.QSpinBox(self)
        self.rotatetspinbox.setRange(1,10)
        self.rotatetspinbox.valueChanged.connect(self.slotRotate)

        self.scaletext = QtGui.QLabel("缩放")
        self.scalespinbox = QtGui.QSpinBox(self)
        self.scalespinbox.setRange(1,10)
        self.scalespinbox.valueChanged.connect(self.slotScale)

        self.translatetext = QtGui.QLabel("平移")
        self.translatespinbox = QtGui.QSpinBox(self)
        self.translatespinbox.setRange(1,10)
        self.translatespinbox.valueChanged.connect(self.slotTranslate)


        self.sheartext = QtGui.QLabel("切变")
        self.shearspinbox = QtGui.QSpinBox(self)
        self.shearspinbox.setRange(1,10)
        self.shearspinbox.valueChanged.connect(self.slotShear)

        self.rightlayout = QtGui.QVBoxLayout()
        self.rightlayout.addWidget(self.rotatetext)
        self.rightlayout.addWidget(self.rotatetspinbox)
        self.rightlayout.addWidget(self.scaletext)
        self.rightlayout.addWidget(self.scalespinbox)
        self.rightlayout.addWidget(self.translatetext)
        self.rightlayout.addWidget(self.translatespinbox)
        self.rightlayout.addWidget(self.sheartext)
        self.rightlayout.addWidget(self.shearspinbox)

        self.leftlayout = QtGui.QHBoxLayout()
        self.leftlayout.addWidget(self.area)

        self.mainlayout = QtGui.QHBoxLayout()
        self.mainlayout.addLayout(self.leftlayout)
        self.mainlayout.addLayout(self.rightlayout)
        self.setLayout(self.mainlayout)



if __name__ == '__main__':
    import  sys
    app = QtGui.QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())


程序运行效果图:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值