【Python】EasyGui实现一个抽取幸运观众交互程序

目录

        碰见一个比较简单的课设大作业,“用户界面友好”这几个字每一个字都认识,但是连在一起,就不太清楚老师想要的具体是啥了,那只能按照我自己的想法来理解了。

        课设大作业的具体要求如下图:

        “友好的用户界面”,按照我的想法,那就只能是开始出现一个弹窗,然后给出三个选项(录入、抽取、退出),要操作哪一个就按下哪个按钮。

       如果选择录入按钮,那就弹出录入界面,三个信息输入框(编号,姓名,手机号码),也可以两个,编号自动递增。

       如果选择抽取幸运观众,那就随机抽取三位幸运观众,一次抽取一位,并且弹出窗口确认抽到的人是否到场,到场则登记信息,否则重新抽取。

       再三强调的退出按钮,点击退出程序。


 一、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还是一个非常简单好用的库,基本上要实现按钮、输入框、选择框都是只需要一行代码就能搞定。

猜你喜欢

转载自blog.csdn.net/xanadw/article/details/124952759
今日推荐