#导入教程excel文档https://blog.csdn.net/sinat _ 28576553/article/details/81275650
#导入教程oenpyxlexcel文档https://www.cn blogs.com/blueskyj/p/7571787.html
# pip install-I https://安装pypi.tuna.Tsinghua.edu.cn/simpleopenpyxl # openpyxl。 CMD必须以管理员身份运行
#教程tkinter使用https://blog.csdn.net/ahilll/article/details/81531587
导入tkinter as tk # tkinter是python附带的图形开发库
导入openpyxl导入到openpyxl库中,该库中可以修改excel中的单元格内容。
导入随机
窗口=tk.tk (#创建新窗口
window.title (“抽奖”) #窗口中显示的名称
窗口. geometry (' 500 x300 ' ) #窗口的分钟大小
displayword=tk.label(window,text='班级抽签程序',
bg='green ',font=('Arial ',12 ),
width=30、height=2) #设定要显示文本的内容"等级抽选程序",
displayword.pack在窗口中显示文本(系统会自动设置位置)
显示word1=tk.label (window,text='类选项: ',
bg='green ',font=('Arial ',12 ),
width=30,height=2)
显示word1. pack (
设置inputword=tk.entry(window,show=None,font=('Arial ',14 ) )单行输入框,然后输入选定的类
输入word.pack (
displayword2=tk.label(window,text='每个次数上限: ',
bg='green ',font=('Arial ',12 ),
width=30、height=2) #设定要显示文本内容"中奖次数上限: "
显示word2. 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) #设定显示文本的内容"抽签结果"
显示word3. pack (
print'1'#可以通过设置print函数来检测程序运行到了哪个代码。
读取workbook=openpyxl.load _ workbook (列表. xlsx ) (excel语句)列表(.xlsx )
# worksheet=workbook.worksheets [1] #按照工作簿的顺序将0作为第一个表读取
sheet names=str (workbook.sheet names )获取所有工作簿名称。 默认存储格式为list,数据类型必须更改为str
displayword1['text']='类选项:' sheetnames #将displayword1的显示内容更改为'类选项:'str(sheetnames )
打印('2) )。
在def定义函数之前,必须创建新变量。 函数内部新创建的变量是局部变量,函数外部是全局变量(global )。
sheetname=' '
#cols=0
#col=0
rows=0
row=0
cv=''#单元格的值
number=' '
运行时间=0
name=' '
ID=' '
#定义函数,点击按钮后触发的程序。
defclick(:
sheetname=inputword.get(#获取输入框中的工作簿名称
工作簿=workbook [ sheet name ] #使用工作簿名称读取
#cols=worksheet.max_column #获取最大列数
获取rows=worksheet.max_row #最大行数
row=random.randint(2,rows ) #获取随机的一行
#col=random.randint(2,cols )获取随机列数
cv=worksheet.cell (1,1 ).value #获取单元格中第一行、第一列的值
number=worksheet.cell(Row,3 ).value #获取随机行第三列中单元格的值
获取在Numbers=int(inputword2.get )输入框内设置的上限,并转换为int类型
#循环次数控制程序的结果,存在有可能遗漏,概率非常低,存在可以通过调整次数来降低概率的缺点。
运行时间=0
while runtimes=5000:
if number=numbers:
name=worksheet.cell(row,1 ).value #获取随机的第一行、第一列单元格的值和学生姓名
id=str(worksheet.cell(row,2 ).value )获取随机行、列2中单元格的值和学生的学号,并将数据类型转换为str
number=number 1 #学生中奖次数加1
将worksheet.cell(row,3,number )单元格的row行、3列的值更改为number
#打印(cv,name ) )。
displayword3['text']=name ID #将显示在displayword3上的内容设置为提取中学生的姓名和学校号
显示word3. pack (
退出break #循环
else:
runtimes=runtimes 1 #在执行次数上加1
row=random.randint(2,rows ) #获取随机的一行
#col=random.randint(2,cols )获取随机列数
number=worksheet.cell(Row,3 ).value #获取随机行第三列中单元格的值
运行ifruntimes5000:#5000次后仍找不到符合条件的学生
displayword3['text']='没有同学符合条件'将显示在displayword3上的内容设置为“没有同学符合条件”
workbook.save (列表. xlsx ) #保存工作表
B1=tk.button (窗口,text='确认',width=10,
height=2,command=click(#设定按钮的参数
B1 .包() ) )。
# wait=input (双击#.py文件直接运行,以防止程序退出。 编辑状态后,input函数将阻止程序显示tk接口