目录
碰见一个比较简单的课设大作业,“用户界面友好”这几个字每一个字都认识,但是连在一起,就不太清楚老师想要的具体是啥了,那只能按照我自己的想法来理解了。
课设大作业的具体要求如下图:
“友好的用户界面”,按照我的想法,那就只能是开始出现一个弹窗,然后给出三个选项(录入、抽取、退出),要操作哪一个就按下哪个按钮。
如果选择录入按钮,那就弹出录入界面,三个信息输入框(编号,姓名,手机号码),也可以两个,编号自动递增。
如果选择抽取幸运观众,那就随机抽取三位幸运观众,一次抽取一位,并且弹出窗口确认抽到的人是否到场,到场则登记信息,否则重新抽取。
再三强调的退出按钮,点击退出程序。
一、EasyGUI是什么?
在easygui 中,所有GUI 交互都由简单的函数调用来调用。
这是一个使用 easygui 的简单演示程序。它生成的屏幕显示在 easygui 主页上。
while 1 : msgbox ( "Hello, world!" ) msg = "你最喜欢的味道是什么?" title = "Ice Cream Survey" Choices = [ "Vanilla" , "Chocolate" , "Strawberry" , "Rocky Road" ] choice = choicebox ( msg , title , choices ) #注意我们将选项转换为字符串,以防万一 用户取消了选择,我们得到了无。 msgbox ( "你选择了:" " choice ), "Survey Result" ) msg = "你想继续吗?" title = "请确认" if ccbox ( msg , title ): # 显示继续/取消对话框 传递 # 用户选择继续 else : sys . exit ( 0 ) # 用户选择取消
二、使用步骤
1.引入库
import easygui
2.完善主函数
因为后面录入信息到文件的时候,采用的是追加写到文件中,所以一开始清除文件中原有的信息。
if __name__ == '__main__':
#清除文件信息
f = open("file05.txt", "w")
f.close()
3.显示操作框
while True:
choice = easygui.indexbox('请选择下面的操作', '抽取幸运观众', ('录入观众信息', '抽取幸运观众','退出'))
具体效果就是这样的。
4. 增加录入信息操作
#录入观众的信息
def registerInfo(number,name,phone):
person = [number, name, phone]
#查找观众是否已经存在
if audiencesInfo.count(person) == 0:
audiencesInfo.append(person)
f = open("file05.txt", "a")
f.write('\n')
f.writelines(' '.join(person))
f.close()
else:
return False
return True
if choice == 0:
filedNames = ['编号','姓名','手机号码']
number,name,phone = easygui.multenterbox('输入观众信息','输入观众信息', filedNames)
value = registerInfo(number,name,phone)
if value:
easygui.msgbox('录入成功')
else:
easygui.msgbox('观众已存在')
#print(audiencesInfo)
5.增加抽取幸运观众功能
def drawAudience():
flag = True
random_count = 0
address = ''
while flag:
lucklyNum = random.randint(0, len(audiencesInfo) - 1)
if lucklyIndex.count(lucklyNum)==0:
address = signInPerson(lucklyNum)
if len(address) > 0:
flag = False
random_count += 1
#限制随机次数,防止出现三位观众,有一位没有到,导致一直随机的问题
if random_count > 3*len(audiencesInfo):
return False
lucklyAudiences.append([audiencesInfo[lucklyNum][0],audiencesInfo[lucklyNum][1],audiencesInfo[lucklyNum][2],address])
#print(lucklyAudiences)
return True
下面这个功能是登记到场观众信息
def signInPerson(lucklyNum):
msg = str(audiencesInfo[lucklyNum][1]) + str(" ") + str(audiencesInfo[lucklyNum][2]) + str("是否到场")
value = easygui.ynbox(msg)
if value:
lucklyIndex.append(lucklyNum)
address = easygui.enterbox('登记地址')
return address
else:
return ''
这个则是保存幸运观众信息
def saveLuckly():
fw = open("luckly.txt", "w")
for personInfo in lucklyAudiences:
fw.writelines(' '.join(personInfo))
fw.write('\n')
fw.close()
main函数处理选项操作
elif choice == 1:
if len(audiencesInfo)>=3:
lucklyIndex.clear()
lucklyAudiences.clear()
for i in range(0,3):
value = drawAudience()
if value is not True:
easygui.msgbox('抽取幸运观众失败,请检查到场观众位数')
break
if len(lucklyAudiences)==3:
saveLuckly()
else:
easygui.msgbox('观众数量不足三位,请补充信息')
6.退出功能
elif choice == 2:
exit()
else:
#防止增加输入框但没有改上面对应的数字导致无法退出
exit()
完整的代码如下:
#!/usr/bin/python3
import random
import easygui
#录入的观众信息
#audiencesInfo = [['0','张三','110'],['1','张四','119'],['2','张五','120']]
audiencesInfo = []
#抽取的幸运观众
lucklyIndex = []
lucklyAudiences = []
#录入观众的信息
def registerInfo(number,name,phone):
person = [number, name, phone]
#查找观众是否已经存在
if audiencesInfo.count(person) == 0:
audiencesInfo.append(person)
f = open("file05.txt", "a")
f.write('\n')
f.writelines(' '.join(person))
f.close()
else:
return False
return True
def drawAudience():
flag = True
random_count = 0
address = ''
while flag:
lucklyNum = random.randint(0, len(audiencesInfo) - 1)
if lucklyIndex.count(lucklyNum)==0:
address = signInPerson(lucklyNum)
if len(address) > 0:
flag = False
random_count += 1
#限制随机次数,防止出现三位观众,有一位没有到,导致一直随机的问题
if random_count > 3*len(audiencesInfo):
return False
lucklyAudiences.append([audiencesInfo[lucklyNum][0],audiencesInfo[lucklyNum][1],audiencesInfo[lucklyNum][2],address])
#print(lucklyAudiences)
return True
def saveLuckly():
fw = open("luckly.txt", "w")
for personInfo in lucklyAudiences:
fw.writelines(' '.join(personInfo))
fw.write('\n')
fw.close()
def signInPerson(lucklyNum):
msg = str(audiencesInfo[lucklyNum][1]) + str(" ") + str(audiencesInfo[lucklyNum][2])
msg1 = msg + str("是否到场")
value = easygui.ynbox(msg1)
if value:
lucklyIndex.append(lucklyNum)
msg2 = msg+str("登记地址")
address = easygui.enterbox(msg2)
return address
else:
return ''
# def signIn():
# choices = []
# choices.append(lucklyAudiences[0][1:3])
# choices.append(lucklyAudiences[1][1:3])
# choices.append(lucklyAudiences[2][1:3])
# selectPerson = easygui.multchoicebox('确认幸运观众是否到场', '签到', choices)
if __name__ == '__main__':
#清除文件信息
f = open("file05.txt", "w")
f.close()
while True:
choice = easygui.indexbox('请选择下面的操作', '抽取幸运观众', ('录入观众信息', '抽取幸运观众','退出'))
if choice == 0:
filedNames = ['编号','姓名','手机号码']
number,name,phone = easygui.multenterbox('输入观众信息','输入观众信息', filedNames)
value = registerInfo(number,name,phone)
if value:
easygui.msgbox('录入成功')
else:
easygui.msgbox('观众已存在')
#print(audiencesInfo)
elif choice == 1:
if len(audiencesInfo)>=3:
lucklyIndex.clear()
lucklyAudiences.clear()
for i in range(0,3):
value = drawAudience()
if value is not True:
easygui.msgbox('抽取幸运观众失败,请检查到场观众位数')
break
if len(lucklyAudiences)==3:
saveLuckly()
else:
easygui.msgbox('观众数量不足三位,请补充信息')
elif choice == 2:
exit()
else:
#防止增加输入框但没有改上面对应的数字导致无法退出
exit()
总结
EasyGui还是一个非常简单好用的库,基本上要实现按钮、输入框、选择框都是只需要一行代码就能搞定。