KyleKing 发表于 2023-3-23 15:30

萌新第一帖!python写的抽奖小软件,附源码

本帖最后由 KyleKing 于 2023-3-23 15:34 编辑

最近在学习pyqt5,想起了高中老师随机抽取学生回答问题的抽奖小程序,自己也试着做了一个,用法很简单,输入总数比如100,那么点击开始抽奖,就开始滚动大屏幕,点击停止,抽出中奖数字,大家可以根据自己的实际情况来进行进一步优化和改进,有想法也可以留言给我。

附上源码
import sys
import random
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, QThread, pyqtSignal

class LotteryThread(QThread):
    signal = pyqtSignal(int)

    def __init__(self, max_num):
      super().__init__()
      self.max_num = max_num

    def run(self):
      while True:
            num = random.randint(1, self.max_num)
            self.signal.emit(num)
            self.msleep(50)

class Lottery(QWidget):
    def __init__(self):
      super().__init__()
      self.initUI()

    def initUI(self):
      self.setWindowTitle('抽奖程序')
      self.setGeometry(300, 300, 500, 400)

      self.title_label = QLabel(self)
      self.title_label.setText('XXX抽奖活动')      #这里修改抽奖活动的标题
      self.title_label.setFont(QFont('Arial', 20))
      self.title_label.setAlignment(Qt.AlignCenter)
      self.title_label.setGeometry(0, 50, 500, 50)

      self.num_label = QLabel(self)
      self.num_label.setText('0')
      self.num_label.setFont(QFont('Arial', 100))
      self.num_label.setAlignment(Qt.AlignCenter)
      self.num_label.setGeometry(0, 150, 500, 100)

      self.input_edit = QLineEdit(self)
      self.input_edit.setGeometry(210, 300, 80, 30)
      self.input_edit.setPlaceholderText("请输入总数")

      self.start_button = QPushButton('开始抽奖', self)
      self.start_button.setGeometry(50, 350, 100, 30)
      self.start_button.clicked.connect(self.start_lottery)

      self.stop_button = QPushButton('停止抽奖', self)
      self.stop_button.setGeometry(350, 350, 100, 30)
      self.stop_button.clicked.connect(self.stop_lottery)

      self.lottery_thread = LotteryThread(1)
      self.lottery_thread.signal.connect(self.update_num)

    def start_lottery(self):
      max_num = int(self.input_edit.text())
      self.lottery_thread.max_num = max_num
      self.lottery_thread.start()

    def stop_lottery(self):
      self.lottery_thread.terminate()

    def update_num(self, num):
      self.num_label.setText(str(num))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    lottery = Lottery()
    lottery.show()
    sys.exit(app.exec_())

qq824356421 发表于 2023-3-23 19:56

可以用于超市那种抽奖么?

deqian0313 发表于 2023-3-23 21:14

我想设定后门怎么搞的比如抽到第五个,第五个必中指定的奖品

KyleKing 发表于 2023-3-24 10:09

deqian0313 发表于 2023-3-23 21:14
我想设定后门怎么搞的比如抽到第五个,第五个必中指定的奖品

我写这个这个是纯随机抽,想要加后门的话,可以设定一个循环次数变量,加个判断函数,当循环到第几次的时候,点击暂停按钮直接显示就行

KyleKing 发表于 2023-3-24 10:11

qq824356421 发表于 2023-3-23 19:56
可以用于超市那种抽奖么?

只要给每个人编一个号,都可以直接用这个来抽

18136627521 发表于 2023-3-25 18:19

我想知道怎么安装python实现可以生成小的EXE,因为我朋友会代码,给我的代码我想变成程序供自己使用

deqian0313 发表于 2023-3-25 21:47

KyleKing 发表于 2023-3-24 10:09
我写这个这个是纯随机抽,想要加后门的话,可以设定一个循环次数变量,加个判断函数,当循环到第几次的时 ...

这种抽奖在我们公司不可能放出去的只能是领导拿的~~~

KyleKing 发表于 2023-3-27 11:27

18136627521 发表于 2023-3-25 18:19
我想知道怎么安装python实现可以生成小的EXE,因为我朋友会代码,给我的代码我想变成程序供自己使用

用python打包工具PyInstaller,给你个链接:https://blog.csdn.net/weixin_56659172/article/details/128048924

18136627521 发表于 2023-3-29 22:28

这玩意如果只想学个办公自动化的编程不知道难不难

RichardWei 发表于 2023-3-31 10:31

楼主加油,学到了感谢!!
页: [1]
查看完整版本: 萌新第一帖!python写的抽奖小软件,附源码