公司年會氯庆,需要一個非常簡單的抽獎工具蹭秋,因為我的電腦是windows
系統(tǒng),年會要在同事的Mac
上面使用堤撵,考慮到開發(fā)的便捷性和跨平臺特性仁讨,用Python
是最好的選擇。
1实昨、獲取抽獎名單洞豁。我拿到的人員名單在一個excel
表格中,使用openpyxl
或者xlrd
庫可以很容易讀到所有的人名荒给,放入一個集合set
或者列表list
即可丈挟。
名單.png
2、抽獎邏輯:每次點擊開始抽獎時志电,都會把抽獎名單打亂曙咽。使用定時器,每隔一段時間挑辆,例如
50ms
例朱,依據打亂的名單列表,按照索引不斷修改文本框中的人名鱼蝉,點擊停止時停止定時器洒嗤,文本框中的人名就不會再變化,這時顯示的人名即為中獎者魁亦。然后渔隶,將已經中獎的人名從列表中刪掉,確保下次抽獎時不會重復中獎洁奈。顯示界面:
抽獎效果
3间唉、主要代碼如下。顯示的界面可以用
qtDesigner
畫出來睬魂,再用pyuic
自動生成界面代碼终吼。代碼在windows
系統(tǒng)和蘋果Mac
上面都可以直接運行,只是字體顯示稍有不同氯哮。
#!/usr/bin/env python3
from xlrd import open_workbook
from lottery_draw import Ui_MainForm
import sys
import random
import time
import os.path
from PyQt5.QtCore import QThread, QTimer
from PyQt5 import QtCore, QtGui, QtWidgets
NAME_SET = set()
def get_all_names():
p_path = os.path.split(os.path.realpath(__file__))[0]
table = open_workbook(p_path + '/抽獎名單.xlsx').sheet_by_index(1)
for cell in table.col_values(0):
if not cell:
break
NAME_SET.add(cell.strip())
class Py_Select(Ui_MainForm, QtWidgets.QWidget):
def __init__(self):
super(Py_Select, self).__init__()
self.setupUi(self)
self.init()
self.setWindowTitle("抽獎工具")
def init(self):
get_all_names()
self.name_list = list(NAME_SET)
self.boxNames.setText('')
self.btnStart.clicked.connect(self._start)
self.btnStop.clicked.connect(self._stop)
self.index = 0
self.timer = None
def _start(self):
self.btnStart.setHidden(True)
self.btnStop.setHidden(False)
self.name_list = list(NAME_SET)
random.seed(int(time.time()))
random.shuffle(self.name_list)
if not self.timer:
self.timer = QTimer()
self.timer.timeout.connect(self._range_name)
self.timer.start(50)
def _range_name(self):
self.index += 1
if self.index >= len(self.name_list):
self.index = 0
self.boxNames.setText(self.name_list[self.index])
def _stop(self):
if self.timer:
self.timer.stop()
NAME_SET.discard(self.boxNames.text().strip())
self.btnStart.setHidden(False)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
myshow = Py_Select()
myshow.show()
sys.exit(app.exec_())