painter 坐标系理解

设置视口,该坐标为物理坐标,我们可以设置视口大小,然后把逻辑坐标映射过来。一般设视口为整个显示区域。由于宽度和高度会不一致,我们就把视口的宽和高设为widget的宽,高较小的那一个。不明白看下面代码

        w=self.width()
        h=self.height()
        side=min(w,h)
        rect=QRect((w-side)/2,(h-side)/2,side,side)
        painter.setViewport(rect)
        painter.drawRect(rect)

(w-side)/2,(h-side)/2表示视口的左上点坐标。

逻辑坐标跟视口其实没关系。

from PyQt5.Qt import *
class Window(QLabel):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.parent=parent

    def paintEvent(self, event) -> None:
        painter=QPainter(self)


        w=self.width()
        h=self.height()
        side=min(w,h)
        rect=QRect((w-side)/2,(h-side)/2,side,side)
        painter.setViewport(rect)
        painter.drawRect(rect)

        painter.setWindow(-100,-100,200,200)
        painter.scale(1,-1)



        for i in range(36):
            painter.drawEllipse(QPoint(30,30),50,50)
            painter.rotate(10)

if __name__ == '__main__':
    import sys
    app=QApplication(sys.argv)

    win=Window()
    win.show()

   
    sys.exit(app.exec_())

假如我现在想设在一个为200的正方形区域内绘图,刚开始坐标系也是x向右,y向下。又因为原点是在中心。这样左上点的坐标当然为(-100,-100)了。我们就要这样设painter.setWindow(-100,-100,200,200)。我们平时都习惯数学上的坐标系,怎么办呢?很简单,把坐标变换下就可以了。painter.scale(1,-1)这样就行了。还可以用painter.translate(x,y)移动原点位置。

 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值