python寫一個(gè)隨機(jī)點(diǎn)名軟件的實(shí)例
更新時(shí)間:2019年11月28日 16:58:31 作者:寂靜的天空
今天小編就為大家分享一篇python寫一個(gè)隨機(jī)點(diǎn)名軟件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
最近有個(gè)隨機(jī)點(diǎn)名軟件的需求,故寫了一個(gè),上代碼: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對(duì)象
: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):
"""
手動(dòng)抽獎(jiǎng)時(shí)點(diǎn)擊停止按鈕時(shí)的操作
:return:
"""
if self.is_auto:
self.ifdo = False
button2["text"] = '手動(dòng)抽獎(jiǎng)'
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):
"""
手動(dòng)開(kāi)始時(shí)的停止標(biāo)記
:return:
"""
if self.is_auto == -1:
self.is_auto = True
self.ifdo = True
pict["image"] = huang_gif
button2["text"] = '點(diǎn)擊停止'
def auto_start(self):
"""
自動(dòng)開(kāi)始設(shè)置更改標(biāo)記
:return:
"""
if self.is_auto == -1:
self.is_auto = False
self.auto_choise = True
pict["image"] = huang_gif
button["text"] = '先別點(diǎn)我'
global ft1
ft1 = tkFont.Font(family='Fixdsys', size=80, weight=tkFont.BOLD)
def auto(self):
"""
自動(dòng)開(kāi)始時(shí)執(zhí)行的操作
: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"] = '開(kāi)始抽獎(jiǎng)'
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("隨機(jī)抽獎(jiǎng)器(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='隨機(jī)抽獎(jiǎng)', font=ft, width=8) # 默認(rèn)顯示
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)
# 抽獎(jiǎng)時(shí)的圖片
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='自動(dòng)抽獎(jiǎng)', command=name)
button.grid(row=3, column=1, columnspan=1)
flag = False
button2 = Button(root, text='手動(dòng)抽獎(jiǎng)', command=name2)
button2.grid(row=3, column=2, columnspan=1)
tr = MyThread()
tr.setDaemon(True)
tr.start()
root.mainloop()
except Exception as e:
print('錯(cuò)誤信息', e)
time.sleep(60)
效果如下:

以上這篇python寫一個(gè)隨機(jī)點(diǎn)名軟件的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 基于Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生點(diǎn)名系統(tǒng)
- 基于Python編寫一個(gè)點(diǎn)名器的示例代碼
- Python寫一個(gè)簡(jiǎn)單上課點(diǎn)名系統(tǒng)(附源碼)
- python實(shí)戰(zhàn)練習(xí)做一個(gè)隨機(jī)點(diǎn)名的程序
- Python實(shí)現(xiàn)上課點(diǎn)名器系統(tǒng)
- 一起用Python做個(gè)上課點(diǎn)名器的制作過(guò)程
- python用tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易能進(jìn)行隨機(jī)點(diǎn)名的界面
- 基于python tkinter的點(diǎn)名小程序功能的實(shí)例代碼
- Python輕松寫個(gè)課堂隨機(jī)點(diǎn)名系統(tǒng)
相關(guān)文章
Django restframework 源碼分析之認(rèn)證詳解
這篇文章主要介紹了Django-restframework 源碼分析之認(rèn)證詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
tensorflow 獲取所有variable或tensor的name示例
今天小編就為大家分享一篇tensorflow 獲取所有variable或tensor的name示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
淺談Python處理json字符串為什么不建議使用eval()
本文主要介紹了Python處理json字符串為什么不建議使用eval(),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Python多線程、異步+多進(jìn)程爬蟲(chóng)實(shí)現(xiàn)代碼
這篇文章主要介紹了Python多線程、異步+多進(jìn)程爬蟲(chóng)實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02
python?使用ctypes調(diào)用C/C++?dll詳情
這篇文章主要介紹了python?使用ctypes調(diào)用C/C++?dll詳情,文章首先通過(guò)導(dǎo)入ctypes模塊,加載C/C++?dll到python進(jìn)程空間展開(kāi)主題相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-04-04

