模式一说明文档

  1. 添加奖品

输入奖品名称和奖品个数,生成奖池

def addPrize(self):

        try:

            if self.inputName.get() != None and self.inputName.get() != '':

                if self.inputChance.get()!= '' and isinstance(int(self.inputChance.get()), int):

                    self.Chance = int(self.inputChance.get())

                    self.Name = self.inputName.get()

                    self.weight[self.Name] = self.Chance

                    self.setWeight(self.weight)

                    self.weight = {}

                    self.messagebox.showinfo('SUCCESS', '添加奖品成功!')

                    self.inputName.delete(first=0, last='end')

                    self.inputChance.delete(first=0, last='end')

                else:

                    self.messagebox.showwarning('ERROR', '请输入一个整数!')

            else:

                self.messagebox.showwarning('ERROR', '请输入奖品名称!')

        except Exception as e:

            self.messagebox.showwarning(e)

  1. 查询奖品

查询奖池中剩下的奖品名称及其个数

def checkPrize(self):

        if (len(self.chanceList) <= 0):

            self.messagebox.showinfo('ERROR', '没有奖品了')

        else:

            store = {}

            for tmp in self.chanceList:

                if store.get(tmp)!=None:

                    store[tmp] += 1

                else :

                    store[tmp] = 1

            message = ''

            for k, v in store.items():

                message +=  k + '剩余 : ' + str(v)+ '个'+'\n'

            self.messagebox.showinfo('查询结果', message)

  1. ui界面设计

用户可以在此界面输入奖品名称以及奖品个数,将奖品添加入奖池,查询奖池情况以及开奖

def graphicsUI(self):

        self.window = self.tk.Tk(className='抽奖')  # 窗口

        self.nameTitle = self.tk.Label()

        self.nameTitle["text"] = "在此输入奖品名称"

        self.nameTitle.pack()

        self.inputName = self.tk.Entry()

        self.inputName.pack()

        self.chanceTitle = self.tk.Label()

        self.chanceTitle["text"] = "在此输入奖品个数"

        self.chanceTitle.pack()

        self.inputChance = self.tk.Entry()

        self.inputChance.pack()

        self.addButton = self.tk.Button()

        self.addButton["text"] = '添加'

        self.addButton["command"] = self.addPrize

        self.addButton.pack(side='left', padx=30)

        self.checkButton = self.tk.Button()

        self.checkButton["text"] = '查询剩余奖品'

        self.checkButton["command"] = self.checkPrize

        self.checkButton.pack(side='left')

        self.drawButton = self.tk.Button()

        self.drawButton["text"] = '开奖'

        self.drawButton["command"] = self.drawing

        self.drawButton.pack(side='right', padx=30)

        self.window.mainloop()

完整代码:

# 抽奖一次少一个名额

class randomMachine(object):

    import random as rd

    import tkinter as tk

    from tkinter import messagebox

    def setWeight(self, weight):

        for k, v in weight.items():

            for t in range(v):

                self.chanceList.append(k)

    def drawing(self):

        if (len(self.chanceList) <= 0):

            self.messagebox.showwarning('ERROR', '奖品数不够')

        else:

            r = self.rd.randrange(0, len(self.chanceList))  # 随机数

            # print("随机数 : ", r)

            self.rd.shuffle(self.chanceList)  # 打乱列表

            res = self.chanceList.pop(r)

            self.messagebox.showinfo('开奖结果', res)

            print(res)

    def addPrize(self):

        try:

            if self.inputName.get() != None and self.inputName.get() != '':

                if self.inputChance.get()!= '' and isinstance(int(self.inputChance.get()), int):

                    self.Chance = int(self.inputChance.get())

                    self.Name = self.inputName.get()

                    self.weight[self.Name] = self.Chance

                    self.setWeight(self.weight)

                    self.weight = {}

                    self.messagebox.showinfo('SUCCESS', '添加奖品成功!')

                    self.inputName.delete(first=0, last='end')

                    self.inputChance.delete(first=0, last='end')

                else:

                    self.messagebox.showwarning('ERROR', '请输入一个整数!')

            else:

                self.messagebox.showwarning('ERROR', '请输入奖品名称!')

        except Exception as e:

            self.messagebox.showwarning(e)

    def checkPrize(self):

        if (len(self.chanceList) <= 0):

            self.messagebox.showinfo('ERROR', '没有奖品了')

        else:

            store = {}

            for tmp in self.chanceList:

                if store.get(tmp)!=None:

                    store[tmp] += 1

                else :

                    store[tmp] = 1

            message = ''

            for k, v in store.items():

                message +=  k + '剩余 : ' + str(v)+ '个'+'\n'

            self.messagebox.showinfo('查询结果', message)

    def graphicsUI(self):

        self.window = self.tk.Tk(className='抽奖')  # 窗口

        self.nameTitle = self.tk.Label()

        self.nameTitle["text"] = "在此输入奖品名称"

        self.nameTitle.pack()

        self.inputName = self.tk.Entry()

        self.inputName.pack()

        self.chanceTitle = self.tk.Label()

        self.chanceTitle["text"] = "在此输入奖品个数"

        self.chanceTitle.pack()

        self.inputChance = self.tk.Entry()

        self.inputChance.pack()

        self.addButton = self.tk.Button()

        self.addButton["text"] = '添加'

        self.addButton["command"] = self.addPrize

        self.addButton.pack(side='left', padx=30)

        self.checkButton = self.tk.Button()

        self.checkButton["text"] = '查询剩余奖品'

        self.checkButton["command"] = self.checkPrize

        self.checkButton.pack(side='left')

        self.drawButton = self.tk.Button()

        self.drawButton["text"] = '开奖'

        self.drawButton["command"] = self.drawing

        self.drawButton.pack(side='right', padx=30)

        self.window.mainloop()

    def __init__(self):

        self.weight = {}

        self.chanceList = []

if __name__ == "__main__":

    test = randomMachine()

test.graphicsUI()

总结:

我们的代码实现的功能点包括:用户设置奖池参数、生成奖池、生成抽奖结果、用户查询抽奖结果,用户查询奖池状况。

界面简洁明了、易上手,可以根据设置的参数模拟抽奖结果并实时查询卡池,但目前产品功能仍然较为单一,期待日后新功能的加入。

猜你喜欢

转载自www.cnblogs.com/gameforpeace/p/11027640.html