最近有个随机点名软件的需求,故写了一个,上代码: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_path(relative):
"""
图片路径
:param relative:
:return:
"""
if hasattr(sys, "_MEIPASS"):
return os.path.join(sys._MEIPASS, relative)
return os.path.join(relative) def center_window(root, width, height):
"""
中心大小
:param root: tk对象
:param width:
: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.geometry(size) def clear():
lb.delete(0, END) def get_names():
names = []
name_path = os.path.join(BASE_DIR, 'name.txt')
with open(name_path, 'rb') as f:
data = f.read()
cod = chardet.detect(data)['encoding']
if 'gb' in str(cod):
cod = 'gbk'
for name in data.decode(cod).strip().split('\n'):
if name.strip():
names.append(name.strip())
return names class MyThread(Thread):
def __init__(self):
self.ifdo = False
self.auto_choise = False
self.is_auto = -1
super().__init__() def run(self):
while True:
if self.is_auto is True:
while self.ifdo:
index = random.randint(0, len(names) - 1)
echo["text"] = names[index]
root.update_idletasks()
time.sleep(1 / 23 - 0.003)
self.is_auto = -1
elif self.is_auto is False:
if self.auto_choise:
self.auto()
self.is_auto = -1
time.sleep(0.1) def stop(self):
"""
手动抽奖时点击停止按钮时的操作
:return:
"""
if self.is_auto:
self.ifdo = False
button2["text"] = '手动抽奖'
pict['image'] = huaji_gif
_name = random.choice(names)
echo["text"] = _name
lb.insert(END, _name)
root.update_idletasks()
root.update()
for x in locals().keys():
del locals()[x]
gc.collect()
pict['image'] = huaji_gif
scrolly.update() def go(self):
"""
手动开始时的停止标记
:return:
"""
if self.is_auto == -1:
self.is_auto = True
self.ifdo = True
pict["image"] = huang_gif
button2["text"] = '点击停止' def auto_start(self):
"""
自动开始设置更改标记
:return:
"""
if self.is_auto == -1:
self.is_auto = False
self.auto_choise = True
pict["image"] = huang_gif
button["text"] = '先别点我'
global ft1
ft1 = tkFont.Font(family='Fixdsys', size=80, weight=tkFont.BOLD) def auto(self):
"""
自动开始时执行的操作
:return:
"""
copy_names = copy.deepcopy(names)
ren = int(v.get())
for i in range(ren):
for a in range(23):
index = random.randint(0, len(names) - 1)
echo["text"] = random.choice(names)
root.update_idletasks()
time.sleep(1 / 23 - 0.003) choise_name = copy_names.pop(random.choice(range(len(copy_names))))
echo["text"] = choise_name lb.insert(END, choise_name)
if i == ren - 1:
pict['image'] = huaji_gif
button["text"] = '开始抽奖'
for a in range(5):
root.update()
time.sleep(0.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.dirname(os.path.abspath(__file__)) names = get_names() root = Tk() root.title("随机抽奖器(by 王以涛)") center_window(root, 570, 160) ft = tkFont.Font(family='Fixdsys', size=40, weight=tkFont.BOLD)
ft1 = tkFont.Font(family='Fixdsys', size=80, weight=tkFont.BOLD)
echo = Label(root, text='随机抽奖', font=ft, width=8) # 默认显示
echo.grid(row=1, column=1, columnspan=2) scrolly = Scrollbar(root)
scrolly.grid(row=1, column=5, rowspan=2, ipady=30)
lb = Listbox(root, yscrollcommand=scrolly.set, exportselection=False, height=6)
lb.grid(row=1, column=3, rowspan=2, columnspan=2, pady=0)
scrolly['command'] = lb.yview # button = Button(root, text='删除所选名字', command=lambda x=lb: x.delete(ACTIVE))
# button.grid(row=3, column=3)
button = Button(root, text='删除所有名字', command=clear)
button.grid(row=3, column=4) v = StringVar()
Scale(root, from_=1, to=len(names), resolution=1, orient=HORIZONTAL, variable=v).grid(row=2, column=1, columnspan=2) # 抽奖时的图片
data_dir = os.path.join(BASE_DIR, "img")
huaji_gif = PhotoImage(file=resource_path(os.path.join(data_dir, 'huaji.gif')))
huang_gif = PhotoImage(file=resource_path(os.path.join(data_dir, 'huang.gif')))
pict = Label(root, image=huaji_gif)
pict.grid(row=1, column=0, rowspan=3) button = Button(root, text='自动抽奖', command=name)
button.grid(row=3, column=1, columnspan=1)
flag = False button2 = Button(root, text='手动抽奖', command=name2)
button2.grid(row=3, column=2, columnspan=1) tr = MyThread()
tr.setDaemon(True)
tr.start() root.mainloop()
except Exception as e:
print('错误信息', e)
time.sleep(60)

效果如下:

python写一个随机点名软件的更多相关文章

  1. 用Python写一个随机数字生成代码,5行代码超简单

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 第一步,安装 random 库 random库是使用随机数的Python标准库 ...

  2. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  3. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  4. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  5. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  6. python写一个能变身电光耗子的贪吃蛇

    python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...

  7. [py]python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

  8. #写一个随机产生138开头手机号的程序 1.输入一个数量,产生xx条手机号 2.产生的这些手机号不能重复

    import randomcount=int(input('请输入你所想要手机号数量:'))prefix='138'for i in range(count): num=random.sample(r ...

  9. 用python写一个自动化盲注脚本

    前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...

随机推荐

  1. Java多线程编程之读写锁【ReentrantReadWriteLock】

    有时候我们需要有这样的需求:        对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进行 ...

  2. Django使用LDAP

    https://github.com/python-ldap/python-ldap Quick usage example: import ldap l = ldap.initialize(&quo ...

  3. Jmeter获取数据库数据

    1)添加需要的数据库驱动jar包,使用不同的数据库,需要引入的jar包是不一样的: mysql:无需引入其他数据库驱动jar包 sql server:下载sqljdbc.jar包 oracle:ora ...

  4. CPU子系统

    CPU的基本结构: CPU的主要部件: ​ 运算部件.缓存部件.寄存器.控制器.时序部件 CPU的工作原理: ​ 主要功能:处理指令.执行操作.控制时间.数据运算 ​ 执行指令的流程:读取指令.指令译 ...

  5. element-ui 默认排序

    table属性中,设置 :default-sort="{prop:'time', order:'descending'}" 1. prop为排序列,order为排列顺序 2. 多级 ...

  6. Linux的网络不通流程

    a:xshell连不上的问题第一步:检查网络适配器,是否禁用vmware的虚拟机网卡第二步:检查vmware net8的地址是否为10.0.0.1第三步:检查系统的vmware服务是否启动第四步:检查 ...

  7. 【idea】scala&sbt+idea安装配置与测试

    一.IDEA安装 下载Community版的IDEA,Ultimate是免费试用版(相当于用到后面要给钱的) ideaIC-2019.2.3.tar.gz 解压IDEA: tar -zxvf idea ...

  8. MIME 文献资料整理

    一.最近返回来再查询CIP协议的资料,发现MIME (Multipurpose Internet Mail Extensions)需要了解一下.(多用途互联网邮件扩展类型) 有关的直接的文献资料是 & ...

  9. PLC编程的基础知识的总结

    1.Programmable Logic Controller   PLC 代替计算机实现复杂的逻辑控制系统  ,可编程控制器是一种数字运算操作电子系统,转门在工业控制系统中使用而设计的,采用一种可以 ...

  10. Linux命令——readlink、realpath

    参考:Linux命令——ln Linux readlink and realpath Command Tutorial for Beginners (with Examples) 简介 ln命令允许你 ...