首页 > 解决方案 > 线性指南针 python 动画

问题描述

有没有办法在 python 中制作动画(最好使用 PyQt5),从文本文件中读取度数并在线性指南针上显示?要查看线性指南针的外观,请参阅: https ://www.youtube.com/watch?v=XPTboqggOdw&feature=player_embedded

标签: pythonanimationpyqt5

解决方案


制作指南针方法...其中 Painter 是 QPainter 对象,r 是 self.rect 作为小部件的大小。yaw 是不断更新指南针的值数组。

def Compass(self,painter,yaw,r):
    i = r.center().x()
    # print(yaw)
    yaw_pix = int(yaw*6)
    pos_pix = yaw_pix + r.center().x()
    deg_pix = 0   

    if(yaw<0):
        yaw+=360

    painter.drawLine(r.center().x(),10,r.center().x(),35)
    painter.drawText(r.center().x()-10,50,str(int(yaw)))

    if (pos_pix <= r.right()):
        shift = r.center().x() - pos_pix
    else:
        pos_pix = r.center().x()-(pos_pix-r.center().x())
        shift = r.center().x() - pos_pix
    if(shift >= 0):
        while (i <= r.right()+shift):
            j = r.center().x()-(i-r.center().x())
            if (i <= r.right()+shift) and ((i-r.center().x())%90 == 0):
                angle = deg_pix/6
                painter.drawLine(i+shift,15,i+shift,30)
                painter.drawText(i+shift,15,str(int(angle)))
                if (i != j):
                    painter.drawLine(j+shift,15,j+shift,30)
                    painter.drawText(j+shift,15,str(int(360-angle)))

            painter.drawLine(i+shift,20,i+shift,30)
            painter.drawLine(j+shift,20,j+shift,30)
            i+=30
            deg_pix+=30
    else:
        while (i <= r.right()-shift):
            j = r.center().x()-(i-r.center().x())
            if (i <= r.right()-shift) and ((i-r.center().x())%90 == 0):
                angle = deg_pix/6
                painter.drawLine(i+shift,15,i+shift,30)
                painter.drawText(i+shift,15,str(int(angle)))
                if (i != j):
                    painter.drawLine(j+shift,15,j+shift,30)
                    painter.drawText(j+shift,15,str(int(360-angle)))

            painter.drawLine(i+shift,20,i+shift,30)
            painter.drawLine(j+shift,20,j+shift,30)
            i+=30
            deg_pix+=30

推荐阅读