今天用Python来模拟一个抽奖程序,主要用到Python中一个random随机模块,一个计时器QTimer,运行效果如下:1)random.random() 随机生成0~1之间的随机小数;2)random.randint(a, b) 随机生成a~b之间的随机整数;3) random.uniform(c, d) 随机生成c~d之间的随机小数;4)random.choice(列表) 随机从列表中拿出一个元素;3)计时器开始并设置一个时间 A (ms),就是 每隔时间A (ms) 执行一次槽函数;1)先创建一个“奖项列表”,用随机函数,来随机取出一个奖项;2)创建一个按钮,当点击按钮时,连接一个槽函数,这个槽函数就是创建一个定时器,计时器再连接一个槽函数,定时器每隔一定时间执行一次这个槽函数;3)槽函数就是每隔一定时间就更新一次标签的文本,展示一种动画滚动显示的效果;4)2S后 定时器结束,结束滚动,显示一个随机奖项;from PySide6.QtCore import Qt, QTimerfrom PySide6.QtWidgets import QWidget, QApplication, QPushButton, QGridLayout, QLineEdit, QLabelimport random
class Window(QWidget): def __init__(self): super().__init__() # 设置窗口名称 self.setWindowTitle("抽奖") # 设置窗口尺寸 self.resize(350, 150) # 设置奖项列表 self.data = ["一 等奖", "二 等奖", "三 等奖", "四 等奖", "谢谢参与!"] # 设置CSS样式 self.setStyleSheet(""" QLabel{ font-size:30px; color: red; } """) # 创建水平布局 self.main_lay = QGridLayout() # 设置布局的内容边距 self.main_lay.setContentsMargins(30, 20, 20, 0) # 设置水平布局主布局 self.setLayout(self.main_lay) self.main_lay.setAlignment(Qt.AlignTop) self.main_lay.setSpacing(20) # 创建实例方法 self.setup_01()
def setup_01(self): # 创建展示标签,显示结果 self.label = QLabel() # 随机取出一个奖项 text = random.choice(self.data) # 创建按钮 self.btn = QPushButton("随机抽奖") # 按钮连接槽函数 lottery self.btn.clicked.connect(self.lottery) # 设置文字居中 self.label.setAlignment(Qt.AlignmentFlag.AlignCenter) # 把上面控件添加到网格布局中 self.main_lay.addWidget(self.label, 0, 0) self.main_lay.addWidget(self.btn, 1, 0)
def lottery(self): # 创建一个定时器运行次数变量 self.counter = 0 # 创建一个定时器 self.timer = QTimer() # 定时器开始后,触发timeout信号,连接 update_label 方法 self.timer.timeout.connect(self.update_label) # 让定时器开始,每100ms 触发一次timeout信号 self.timer.start(100)
def update_label(self): # 每更新一次计数加 1 self.counter += 1 # 当更新到 30次时,即2000ms,2S,计时器结束 if self.counter >= 20: self.timer.stop() self.text = random.choice(self.data) self.label.setText(self.text) # 2S内,每100ms更新一次标签文本 # 先从列表中随机拿出个“奖项” self.text = random.choice(self.data) # 把随机拿出的“奖项” 设置给文本 self.label.setText(self.text)
if __name__ == "__main__": import sys app = QApplication(sys.argv) win = Window() win.show() sys.exit(app.exec())
本节主要就是了解了:random()随机模块 和 QTimer()定时器的应用;觉得有用的可以留言、关注,大家相互交流。