暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

国产机器(飞腾FT2000)上绘制党旗PyQT5+KylinV10

震测 2021-07-10
969

前几天写了篇国产机器(飞腾FT2000)上绘制五星红旗PyQT5+KylinV10,当时就立了个flag,想在7月也要完成党旗。确实是有些难度,这次使用了简单的方式来实现,后面再尝试更通用的方式。


具体代码如下所示,在前两天五星红旗代码的基础上,基于银河麒麟KylinV10桌面版、Python3.5+PyQT5,CPU FT2000/4 ARM v8系统上实现的。

from PyQt5.Qt import *
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget,QApplication
import sys, random
import math #import python math lib
#党旗参考了标准 https://www.12371.cn/2021/07/09/ARTI1625818075938118.shtml


class DrawFlags(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 800, 600)
self.setWindowTitle('旗帜')
self.setWindowIcon(QIcon('./icon.png'))
self.show()

def paintEvent(self, event):
painter = QPainter()

painter.begin(self);
self.drawNationalFlag(painter);
self.drawPartyFlag(painter);
painter.end();

def drawNationalFlag(self, painter):
width = 360;
height = 240;


painter.setBrush(QColor("#F40002"))
painter.setPen(QColor("#FFFFFF"))

painter.resetTransform();
painter.translate(QPoint(10, 10));

#绘制红旗
painter.drawRect(0, 0, width, height)

# 首先将坐标原点设为大五角星的中心
painter.translate(70, 70)
painter.setBrush(QColor("#FAF408"))
painter.setPen(QColor("#FAF408"))

# 画大五角星
points = [QPoint(0, -36), QPoint(-12, 0),QPoint(12, 0)]
for num in range(1,6):
# 画三角形构成五角星
painter.rotate(72)
painter.drawConvexPolygon(QPolygon(points))

#四颗小星的中心点
transLates = [QPoint(60, -36), QPoint(24, 24), QPoint(0, 36), QPoint(-24, 24)];
#四颗小星的偏转角度
rotateAngle = [-90-math.degrees(math.atan(0.6)), -90-math.degrees(math.atan(1.0/7.0)),
-math.degrees(math.atan(3.5)), -math.degrees(math.atan(1.25))];

points1 = [QPoint(0, -12), QPoint(-5, 0),QPoint(5, 0)];

for i in range(0,4):
painter.translate(transLates[i]);
#每次画小五角星前将坐标设为要画的五角星的中心
painter.rotate(rotateAngle[i]);
#并且每次都旋转一个角度以对准大五角星
for j in range(0,5):
painter.rotate(72);#五角星由五个三角形组成,每次旋转72°,旋转5次得到五角星
painter.drawConvexPolygon(QPolygon(points1));
#画组成五角星的三角形
painter.rotate(-rotateAngle[i]);


def drawPartyFlag(self, painter):
width = 300;
height = 200;


#首先将坐标原点设到合适的位置
painter.resetTransform();
painter.translate(QPoint(70, 300));


pen = QPen(Qt.red);
painter.setPen(pen);
painter.setBrush(QColor(Qt.red));
flagFramePoints = [QPoint(10, 80), QPoint(20, 10)];
#绘制红旗
painter.drawRect(0, 0, width, height)


#绘制斧头
pen = QPen(Qt.yellow)
painter.setPen(pen)
painter.setBrush(QColor(Qt.yellow))
painter.rotate(0);
axPoints = [QPoint(39,52),QPoint(49,62),QPoint(55,56),QPoint(91,92),QPoint(100,83),QPoint(64,47),QPoint(72,39),QPoint(66,33),QPoint(64,36),QPoint(61,37),QPoint(59,36),QPoint(56,35)];
painter.drawConvexPolygon(QPolygon(axPoints));

#绘制镰刀
sicklePoints = [ QPoint(34,75),QPoint(39,81),QPoint(34,83),QPoint(33,88),QPoint(36,91),QPoint(40,91),QPoint(43,88),QPoint(44,85),QPoint(51,89),QPoint(58,91),QPoint(72,91),QPoint(80,89),QPoint(85,86),QPoint(94,77),QPoint(97,71),QPoint(99,65),QPoint(99,51),QPoint(97,45),QPoint(95,41),QPoint(91,36),QPoint(88,33),QPoint(85,30),QPoint(79,27),QPoint(73,25),QPoint(67,26),QPoint(73,28),QPoint(78,33),QPoint(83,37),QPoint(84,41),QPoint(86,45),QPoint(88,51),QPoint(88,61),QPoint(87,65),QPoint(85,68),QPoint(76,77),QPoint(69,80),QPoint(61,80),QPoint(56,79),QPoint(51,77),QPoint(47,75),QPoint(44,73),QPoint(40,69)];
painter.drawConvexPolygon(QPolygon(sicklePoints));




if __name__ == '__main__':
app= QApplication(sys.argv)
dp = DrawFlags()
sys.exit(app.exec_())


明天,计划发一个关于这几次绘制旗帜用到的国产机器的伪开箱测试。



文章转载自震测,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论