编写一个随机点名程序python_python写一个随机点名软件

news/2024/7/24 7:04:06 标签: 编写一个随机点名程序python

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

from tkinter import *

importtkinter.font as tkFontimportrandomimportgcimportos, sysimportchardetimportcopyfrom threading importThreadimporttimedefresource_path(relative):"""图片路径

:param relative:

:return:"""

if hasattr(sys, "_MEIPASS"):returnos.path.join(sys._MEIPASS, relative)returnos.path.join(relative)defcenter_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)defclear():

lb.delete(0, END)defget_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' instr(cod):

cod= 'gbk'

for name in data.decode(cod).strip().split('\n'):ifname.strip():

names.append(name.strip())returnnamesclassMyThread(Thread):def __init__(self):

self.ifdo=False

self.auto_choise=False

self.is_auto= -1super().__init__()defrun(self):whileTrue:if self.is_auto isTrue:whileself.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 isFalse:ifself.auto_choise:

self.auto()

self.is_auto= -1time.sleep(0.1)defstop(self):"""手动抽奖时点击停止按钮时的操作

:return:"""

ifself.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 inlocals().keys():dellocals()[x]

gc.collect()

pict['image'] =huaji_gif

scrolly.update()defgo(self):"""手动开始时的停止标记

:return:"""

if self.is_auto == -1:

self.is_auto=True

self.ifdo=True

pict["image"] =huang_gif

button2["text"] = '点击停止'

defauto_start(self):"""自动开始设置更改标记

:return:"""

if self.is_auto == -1:

self.is_auto=False

self.auto_choise=True

pict["image"] =huang_gif

button["text"] = '先别点我'

globalft1

ft1= tkFont.Font(family='Fixdsys', size=80, weight=tkFont.BOLD)defauto(self):"""自动开始时执行的操作

:return:"""copy_names=copy.deepcopy(names)

ren=int(v.get())for i inrange(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 inlocals().keys():dellocals()[x]

gc.collect()

scrolly.update()

self.auto_choise=False

flag=Falsedefname2():globalflag

flag= notflagifflag:

tr.go()else:

tr.stop()defname():

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()exceptException as e:print('错误信息', e)

time.sleep(60)


http://www.niftyadmin.cn/n/1240597.html

相关文章

mysql 导出 drop 备份_Mysql的mysqldump详解 mysql数据库备份和导入

摘抄自:https://www.cnblogs.com/flagsky/p/9762726.html一、导出1.1 导出表结构及数据mysqldump -uroot -p --set-gtid-purgedOFF database table1 table2 > mysqldump.sql1.2 只导出表结构mysqldump -uroot -p --set-gtid-purgedOFF -d database table1 table2…

第 10 章 Nacos 实现 Spring Boot 程序读取共享配置数据

本 《Spring Cloud Alibaba微服务实战》 专栏共 30 期,本期为第 10 期内容, 查看专栏详情,猛戳 《Spring Cloud Alibaba微服务实战》。 10.1 章节回顾 上一篇 《Nacos多环境配置部署》 讲解中,主要跟大家分享了服务部署多套环境配置,本章节将讲解应用程序利用Nacos配置中…

python写入txt_「Python篇」如何使用Python处理文件夹的文件数据?

Python已经被誉为当下最火热的编程语言,今天介绍Python中的创建、读取、 更新和删除文件的函数文件处理在Python中使用文件的关键函数是open()函数。 open()函数有两个参数:文件名和模式。有四种打开文件的不同方法(模式):“r"-读取-默认…

SpringCloud Gateway 在不重启网关服务的前提下,实现添加服务路由零配置升级

点击上方“猿芯”,选择“设为星标”后台回复"1024",有份惊喜送给面试的你本文将分四部分讲解:SpringCloud Gateway 实现动态路由必要性SpringCloud Gateway 动态路由源码解析SpringCloud Gateway 动态路由配置实现方式SpringCloud …

python封包和解包_Python基础——解包与封包

1.python封包将多个值赋值给一个变量时,Python会自动将这些值封装成元组,这个特性称之为封包a 1,2,3print(a,type(a))返回(1, 2, 3) 当函数返回多个值时,利用1个变量接收,也会形成同样封包def test():return 1,2,3a test()print…

Java 代码写的又臭又长,还不会用 Java Stream 函数式编程?

点击上方“猿芯”,选择“设为星标”后台回复"1024",有份惊喜送给面试的你原文 https://www.cnblogs.com/CarpenterLee/p/6550212.html一、Java Stream API入门篇你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程…

python title 和capitiliaze_Python画CAP曲线,计算AR值

听别人分享提到了CAP曲线,网上资料比较少,自己动手实践一发CAP曲线和AR值的含义cap曲线.pngCAP曲线就是用绘图的方式比较模型的实际分类效果和最完美模型,完全随机的对比,分别代表实际曲线,最优曲线,随机曲…

SpringBoot提示 spring boot configuration annotation processor not configured

在 Spring Boot 程序中添加 Configuration和ConfigurationProperties(value "ecm.dcc")注解时,会提示 spring boot configuration annotation processor not configured解决办法是在 pom 文件中添加 spring-boot-configuration-processor 配置处理器依赖…