python抽签代码_抽签程序源码

767d0580a2afbbcf5b73e45b13445ef6.png
#教程读取excel文档https://blog.csdn.net/sinat_28576553/article/details/81275650
#教程oenpyxl读取excel文档https://www.cnblogs.com/BlueSkyyj/p/7571787.html
#pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl    #安装openpyxl,CMD需要以管理员身份运行
#教程tkinter使用https://blog.csdn.net/ahilll/article/details/81531587
import tkinter as tk #tkinter是python自带的图形开发库
import openpyxl  #导入openpyxl库,本库可以修改excel的单元格内容。
import random

window = tk.Tk() #新建一个窗口
window.title("抽签")  #窗口显示的名称
window.geometry('500x300') #窗口的分大小

displayword = tk.Label(window,text ='班级抽签程序',
                       bg = 'green', font = ('Arial',12),
                       width = 30,height = 2) #设置将要显示文本内容'班级抽签程序',
displayword.pack() #将文本显示在窗口中(由系统自动设置位置)

displayword1 = tk.Label(window,text ='班级选项:',
                       bg = 'green', font = ('Arial',12),
                       width = 30,height = 2) 
displayword1.pack() 

inputword = tk.Entry(window,show = None, font = ('Arial',14)) #设置一个单行输入框,输入选择的班级
inputword.pack() 

displayword2 = tk.Label(window,text ='抽中次数上限:',
                       bg = 'green', font = ('Arial',12),
                       width = 30,height = 2) #设置将要显示文本内容'抽中次数上限:'
displayword2.pack() 

inputword2 = tk.Entry(window,show = None, font = ('Arial',14)) #设置一个单行输入框,输入设定的选择次数上限
inputword2.pack()

displayword3 = tk.Label(window,text = "抽签结果",
                           bg = 'green', font = ('Arial',12),
                           width = 30,height = 2)#设置将要显示文本内容"抽签结果"
displayword3.pack()

print("1") #通过设置print函数,可以检测程序运行到哪段代码了。

workbook = openpyxl.load_workbook("名单.xlsx") #读取excel文"名单.xlsx"

#worksheet = workbook.worksheets[1]  #通过工作簿顺序读取0为第一张表
sheetnames =str(workbook.sheetnames)  #获取所有的工作簿名称,默认存储形式是list,数据类型需要修改为str
displayword1["text"] = '班级选项:'+ sheetnames  #将displayword1显示内容修改为'班级选项:'+str(sheetnames)

print("2")

#在def定义函数之前,需要新建变量,函数内部新建的变量是局部变量,函数外面是全局变量(global).
sheetname =""
#cols = 0
#col = 0
rows = 0
row = 0
cv = ""#单元格的值
number = ""
runtimes = 0
name = ""
ID = ""

#定义函数,点击按钮以后触发的程序。
def click():
        sheetname = inputword.get()   #获取输入框内工作簿名称
        worksheet = workbook[sheetname] #通过工作簿名称读取
        
        #cols = worksheet.max_column #获取最大的列数
        rows = worksheet.max_row #获取最大的行数
        row = random.randint(2,rows)  #获取随机一个行数
        #col = random.randint(2,cols) #获取随机一个列数
        cv = worksheet.cell(1,1).value  #获取单元格第1行,第1列的值
        number = worksheet.cell(row,3).value #获取第随机行,第3列单元格的值
        numbers = int(inputword2.get()) #获取输入框内设定的上限,并转换为int型
        #通过循环次数控制程序结果,缺点是可能漏掉,概率非常低,可以通过调整次数降低概率。
        runtimes = 0

        while runtimes <=5000:
                if number <= numbers:    
                    name = worksheet.cell(row,1).value #获取第随机行,第1列单元格的值,学生姓名
                    ID = str(worksheet.cell(row,2).value) #获取第随机行,第2列单元格的值,学生学号,并转换数据类型是str
                    number =number + 1 #学生被抽中次数加1
                    worksheet.cell(row,3,number)  #将单元格row行,3列的值修改为number
                    #print(cv,name) 
                    displayword3["text"] = name+ID #将displayword3显示的内容设置为抽中学生的姓名和学号
                    displayword3.pack()
                    break  #跳出循环
                else:
                    runtimes = runtimes + 1  #运行次数加1
                    row = random.randint(2,rows)  #获取随机一个行数
                    #col = random.randint(2,cols) #获取随机一个列数
                    number = worksheet.cell(row,3).value #获取第随机行,第3列单元格的值
                if runtimes >5000:  #如果运行5000次都没有找到符合条件的学生
                        displayword3["text"] = "没有符合条件的同学" #将displayword3显示的内容设置为"没有符合条件的同学"
                        
        workbook.save("名单.xlsx") #保存工作表

b1 = tk.Button(window, text = '确认', width = 10,
               height = 2, command = click) #设置按钮的参数
b1.pack() 

#wait = input() #避免双击.py文件直接运行时程序退出。编辑状态时,input函数会导致程序无法显示tk界面
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值