python写一个随机点名软件

最近有个随机点名软件的需求,故写了一个,上代码:github地址 

# -*- coding: utf-8 -*-
# @Time    : 18-12-31 下午4:21
# @Author  : Felix Wang

from tkinter import *
import tkinter.font as tkFont
import random
import gc
import os, sys
import chardet
import copy
from threading import Thread
import time


def resource_pathrelative):
    """
    图片路径
    :param relative:
    :return:
    """
    if hasattrsys, "_MEIPASS"):
        return os.path.joinsys._MEIPASS, relative)
    return os.path.joinrelative)


def center_windowroot, width, height):
    """
    中心大小
    :param root: tk对象
    :param 
    :param height:
    :return:
    """
    screenwidth = root.winfo_screenwidth)
    screenheight = root.winfo_screenheight)
    size = '%dx%d+%d+%d' % width, height, screenwidth - width) / 2, screenheight - height) / 2)
    root.geometrysize)


def clear):
    lb.delete0, END)


def get_names):
    names = []
    name_path = os.path.joinBASE_DIR, 'name.txt')
    with openname_path, 'rb') as f:
        data = f.read)
        cod = chardet.detectdata)['encoding']
        if 'gb' in strcod):
            cod = 'gbk'
        for name in data.decodecod).strip).split'
'):
            if name.strip):
                names.appendname.strip))
        return names


class MyThreadThread):
    def __init__self):
        self.ifdo = False
        self.auto_choise = False
        self.is_auto = -1
        super).__init__)

    def runself):
        while True:
            if self.is_auto is True:
                while self.ifdo:
                    index = random.randint0, lennames) - 1)
                    echo["text"] = names[index]
                    root.update_idletasks)
                    time.sleep1 / 23 - 0.003)
                self.is_auto = -1
            elif self.is_auto is False:
                if self.auto_choise:
                    self.auto)
                    self.is_auto = -1
            time.sleep0.1)

    def stopself):
        """
        手动抽奖时点击停止按钮时的操作
        :return:
        """
        if self.is_auto:
            self.ifdo = False
            button2["text"] = '手动抽奖'
            pict['image'] = huaji_gif
            _name = random.choicenames)
            echo["text"] = _name
            lb.insertEND, _name)
            root.update_idletasks)
            root.update)
            for x in locals).keys):
                del locals)[x]
            gc.collect)
            pict['image'] = huaji_gif
            scrolly.update)

    def goself):
        """
        手动开始时的停止标记
        :return:
        """
        if self.is_auto == -1:
            self.is_auto = True
            self.ifdo = True
            pict["image"] = huang_gif
            button2["text"] = '点击停止'

    def auto_startself):
        """
        自动开始设置更改标记
        :return:
        """
        if self.is_auto == -1:
            self.is_auto = False
            self.auto_choise = True
            pict["image"] = huang_gif
            button["text"] = '先别点我'
            global ft1
            ft1 = tkFont.Fontfamily='Fixdsys', size=80, weight=tkFont.BOLD)

    def autoself):
        """
        自动开始时执行的操作
        :return:
        """
        copy_names = copy.deepcopynames)
        ren = intv.get))
        for i in rangeren):
            for a in range23):
                index = random.randint0, lennames) - 1)
                echo["text"] = random.choicenames)
                root.update_idletasks)
                time.sleep1 / 23 - 0.003)

            choise_name = copy_names.poprandom.choicerangelencopy_names))))
            echo["text"] = choise_name

            lb.insertEND, choise_name)
            if i == ren - 1:
                pict['image'] = huaji_gif
                button["text"] = '开始抽奖'
            for a in range5):
                root.update)
                time.sleep0.06)

        root.update_idletasks)

        for x in locals).keys):
            del locals)[x]
        gc.collect)

        scrolly.update)
        self.auto_choise = False


flag = False


def name2):
    global flag
    flag = not flag

    if flag:
        tr.go)
    else:
        tr.stop)


def name):
    tr.auto_start)


try:
    BASE_DIR = os.path.dirnameos.path.abspath__file__))

    names = get_names)

    root = Tk)

    root.title"随机抽奖器by 王以涛)")

    center_windowroot, 570, 160)

    ft = tkFont.Fontfamily='Fixdsys', size=40, weight=tkFont.BOLD)
    ft1 = tkFont.Fontfamily='Fixdsys', size=80, weight=tkFont.BOLD)
    echo = Labelroot, text='随机抽奖', font=ft, width=8)  # 默认显示
    echo.gridrow=1, column=1, columnspan=2)

    scrolly = Scrollbarroot)
    scrolly.gridrow=1, column=5, rowspan=2, ipady=30)
    lb = Listboxroot, yscrollcommand=scrolly.set, exportselection=False, height=6)
    lb.gridrow=1, column=3, rowspan=2, columnspan=2, pady=0)
    scrolly['command'] = lb.yview

    # button = Buttonroot, text='删除所选名字', command=lambda x=lb: x.deleteACTIVE))
    # button.gridrow=3, column=3)
    button = Buttonroot, text='删除所有名字', command=clear)
    button.gridrow=3, column=4)

    v = StringVar)
    Scaleroot, from_=1, to=lennames), resolution=1, orient=HORIZONTAL, variable=v).gridrow=2, column=1, columnspan=2)

    # 抽奖时的图片
    data_dir = os.path.joinBASE_DIR, "img")
    huaji_gif = PhotoImagefile=resource_pathos.path.joindata_dir, 'huaji.gif')))
    huang_gif = PhotoImagefile=resource_pathos.path.joindata_dir, 'huang.gif')))
    pict = Labelroot, image=huaji_gif)
    pict.gridrow=1, column=0, rowspan=3)

    button = Buttonroot, text='自动抽奖', command=name)
    button.gridrow=3, column=1, columnspan=1)
    flag = False

    button2 = Buttonroot, text='手动抽奖', command=name2)
    button2.gridrow=3, column=2, columnspan=1)

    tr = MyThread)
    tr.setDaemonTrue)
    tr.start)

    root.mainloop)
except Exception as e:
    print'错误信息', e)
    time.sleep60)

效果如下:

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平