| 108 | |
| 109 | |
| 110 | class CircleLineWindow(QWidget): |
| 111 | |
| 112 | def __init__(self, *args, **kwargs): |
| 113 | super(CircleLineWindow, self).__init__(*args, **kwargs) |
| 114 | # 设置背景颜色 |
| 115 | palette = self.palette() |
| 116 | palette.setColor(palette.Background, backgroundColor) |
| 117 | self.setAutoFillBackground(True) |
| 118 | self.setPalette(palette) |
| 119 | # 获取屏幕大小 |
| 120 | geometry = QApplication.instance().desktop().availableGeometry() |
| 121 | self.screenWidth = geometry.width() |
| 122 | self.screenHeight = geometry.height() |
| 123 | self._canDraw = True |
| 124 | self._firstDraw = True |
| 125 | self._timer = QTimer(self, timeout=self.update) |
| 126 | self.init() |
| 127 | |
| 128 | def init(self): |
| 129 | points.clear() |
| 130 | # 链接的最小距离 |
| 131 | self.linkDist = min(self.screenWidth, self.screenHeight) / 2.4 |
| 132 | # 初始化点 |
| 133 | for _ in range(maxCircles * 3): |
| 134 | points.append(Circle('', self.screenWidth, self.screenHeight)) |
| 135 | self.update() |
| 136 | |
| 137 | def showEvent(self, event): |
| 138 | super(CircleLineWindow, self).showEvent(event) |
| 139 | self._canDraw = True |
| 140 | |
| 141 | def hideEvent(self, event): |
| 142 | super(CircleLineWindow, self).hideEvent(event) |
| 143 | # 窗口最小化要停止绘制, 减少cpu占用 |
| 144 | self._canDraw = False |
| 145 | |
| 146 | def paintEvent(self, event): |
| 147 | super(CircleLineWindow, self).paintEvent(event) |
| 148 | if not self._canDraw: |
| 149 | return |
| 150 | painter = QPainter(self) |
| 151 | painter.setRenderHint(QPainter.Antialiasing) |
| 152 | painter.setRenderHint(QPainter.SmoothPixmapTransform) |
| 153 | self.draw(painter) |
| 154 | |
| 155 | def draw(self, painter): |
| 156 | if circlePulse: |
| 157 | if circleExp < circleExpMin or circleExp > circleExpMax: |
| 158 | circleExpSp *= -1 |
| 159 | circleExp += circleExpSp |
| 160 | |
| 161 | painter.translate(self.screenWidth / 2, self.screenHeight / 2) |
| 162 | |
| 163 | if self._firstDraw: |
| 164 | t = time() |
| 165 | self.renderPoints(painter, points) |
| 166 | if self._firstDraw: |
| 167 | self._firstDraw = False |