MCPcopy Create free account
hub / github.com/PyQt5/PyQt / WidgetCode

Class WidgetCode

Demo/VerificationCode.py:34–111  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32
33
34class 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))

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected