| 32 | |
| 33 | |
| 34 | class WidgetCode(QLabel): |
| 35 | |
| 36 | def __init__(self, *args, **kwargs): |
| 37 | super(WidgetCode, self).__init__(*args, **kwargs) |
| 38 | self._sensitive = False # 是否大小写敏感 |
| 39 | self.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) |
| 40 | self.setBackgroundRole(QPalette.Midlight) |
| 41 | self.setAutoFillBackground(True) |
| 42 | # 字体 |
| 43 | newFont = self.font() |
| 44 | newFont.setPointSize(16) |
| 45 | newFont.setFamily("Kristen ITC") |
| 46 | newFont.setBold(True) |
| 47 | self.setFont(newFont) |
| 48 | self.reset() |
| 49 | # 定时器 |
| 50 | self.step = 0 |
| 51 | self.timer = QBasicTimer() |
| 52 | self.timer.start(60, self) |
| 53 | |
| 54 | def reset(self): |
| 55 | self._code = "".join(sample(WORDS, 4)) # 随机4个字符 |
| 56 | self.setText(self._code) |
| 57 | |
| 58 | def check(self, code): |
| 59 | return self._code == str(code) if self._sensitive else self._code.lower() == str(code).lower() |
| 60 | |
| 61 | def setSensitive(self, sensitive): |
| 62 | self._sensitive = sensitive |
| 63 | |
| 64 | # def setText(self, text): |
| 65 | # text = text if (text and len(text) == 4) else "".join(sample(WORDS, 4)) # 随机4个字符 |
| 66 | # self._code = str(text) |
| 67 | # html = "".join([FONT.format(color=COLORLIST[qrand() % 6], word=t) for t in text]) |
| 68 | # super(WidgetCode, self).setText(HTML.format(html=html)) |
| 69 | |
| 70 | def mouseReleaseEvent(self, event): |
| 71 | super(WidgetCode, self).mouseReleaseEvent(event) |
| 72 | self.reset() |
| 73 | |
| 74 | def timerEvent(self, event): |
| 75 | if event.timerId() == self.timer.timerId(): |
| 76 | self.step += 1 |
| 77 | return self.update() |
| 78 | return super(WidgetCode, self).timerEvent(event) |
| 79 | |
| 80 | def paintEvent(self, event): |
| 81 | painter = QPainter(self) |
| 82 | painter.setRenderHint(QPainter.Antialiasing) |
| 83 | # 背景白色 |
| 84 | painter.fillRect(event.rect(), QBrush(Qt.white)) |
| 85 | # 绘制边缘虚线框 |
| 86 | painter.setPen(Qt.DashLine) |
| 87 | painter.setBrush(Qt.NoBrush) |
| 88 | painter.drawRect(self.rect()) |
| 89 | # 随机画条线 |
| 90 | for _ in range(3): |
| 91 | painter.setPen(QPen(QTCOLORLIST[qrand() % 5], 1, Qt.SolidLine)) |