如何在主进程中强制结束子线程

抽奖工具

在这里插入图片描述

如何在主进程中强制结束子线程 全部代码路径:Git / lottery

import queue
import random
import threading
import time,json
from itertools import cycle

import PySimpleGUI as pg
import globalvar as gl

gl._init()
gl.set_value('stop_threads', False)



def to_base64(file):
    import base64
    with open(file, "rb") as f:  # 转为二进制格式
        base64_data = str(base64.b64encode(f.read()), 'utf-8')  # 使用base64进行加密

    return base64_data



menu_def = [['选项', ['Open', 'Save', 'Exit', ]],]
layout = [[pg.Menu(menu_def, size=(100, 100))],
          [pg.Text('CSDN是全球知名中文IT技术交流平台', key='-content-',background_color='#ffffff',text_color='#000000',font=('微软雅黑', 20)), ],
          [pg.Text(size=(19,20),background_color='#ffffff'),
              pg.Button('', pad=(10),size=(130,30),font=('微软雅黑', 20),
                     key='-btnLottery-',
                     button_color=('#ffffff','#ffffff'),
                     border_width=0,
                     image_data=to_base64('img/start.png'))],
         ]


wd = pg.PySimpleGUI.Window("抽奖小程序", layout, grab_anywhere=True,size=(500,300),use_default_focus=False,background_color='#ffffff')





def actionStart(gui_queue,wd,myList,removeValue):

    result_List = myList[:]
    result_List.remove(removeValue)
    for _ in cycle(myList):
        if gl.get_value('stop_threads'):

            result = random.choice(result_List)
            wd['-content-'].update(value=result)
            break
        else:
            time.sleep(0.1)

            wd['-content-'].update(value=_)



lotteryStatus = False   #按钮状态
myListInit = []       #文本中提供的参与抽选的内容
removeValue = None   #永远不被抽到的内容


def getFile(fileName):
    with open(f'file/{fileName}.txt', encoding='utf-8') as f:
        _string = f.read().replace('\n', '').split(",")

    return _string


def mainFunc():
    gui_queue = queue.Queue()  # Queue是python标准库中的线程安全的队列
    while True:
        event,values = wd.read()

        if event is None:
            wd.close()
            break



        global myListInit,removeValue

        if event=='Open':
            myListInit = getFile('部门')
            removeValue = '人力资源'
        elif event=='Save':
            myListInit = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
            removeValue = 11


        if event=='-btnLottery-':

            if len(myListInit)==0:
                pg.popup_ok('请先选择抽取类型')
                continue

            global lotteryStatus
            lotteryStatus = not lotteryStatus
            myList = myListInit[:]
            if lotteryStatus:
                # 开始抽奖
                # 1.将“抽奖”文字修改为“停止”
                # 2.将线程停止状态更新为False
                wd['-btnLottery-'].update(text='',image_data=to_base64('img/stop.png'))
                gl.set_value('stop_threads', False)

                th = threading.Thread(target=actionStart,args=(gui_queue,wd,myList,removeValue),daemon=True)
                th.start()
                #print('开始', event, values, lotteryStatus)
            else:
                # 停止抽奖#
                # 1.将“抽奖”文字修改为“开始”
                # 2.将线程停止状态更新为True

                wd['-btnLottery-'].update(text='',image_data=to_base64('img/start.png'))
                gl.set_value('stop_threads',True)


if __name__ == '__main__':
    mainFunc()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值