本人自行学 python 完全是网络教程 很多没有费解地方也没人交流 见谅
找了很多 多线程相关 发现都是没 使用在窗口
最多就是
t=threading.Thread()
t.start()
join 使用完全么有效果 使用必崩溃
也想过 用ctypes 弄成 易语言 那样简单调用 可是没反应
这个方式写比较麻烦 要用类分方式写 才能完全做到
循环方式 还必须是 while 如果 使用for 是无法 暂停 恢复 停止的
此 gui 适应也与 tkinter & PySimpleGUI 两者相同
// An highlighted block
#!/usr/bin/python3
import threading
from threading import Thread #线程 多用于 开关密集型
import time
import PySimpleGUI as sg
from multiprocessing import Process #进程 多计算密集型 消耗的是计算机算力
class Mythrand(Thread):
def __init__(self,*args,**kwargs):
super(Mythrand, self).__init__(*args,**kwargs)
self.__flag=threading.Event() #设置暂停标识
self.__flag.set()
self.__running = threading.Event() #设置停止标识
self.__running.set()
def run(self):
i=0
while self.__running.is_set(): #接收停止的信号self.__running.is_set() 此时信号为 True ,True,True
self.__flag.wait() #接收 暂停 和 恢复信号
i+=1
print('线程中...',i)
time.sleep(1)
def pause(self):#暂停线程
self.__flag.clear()
def resume(self):# 恢复线程
self.__flag.set() #先唤醒暂停的线程
def stop(self): #结束线程
self.__flag.set() #先唤醒暂停的线程
self.__running.clear() #self.__running.is_set() 此时信号为 False, False, False
def the_gui():
sg.theme('Light Brown 3')
layout = [[sg.Text('执行示例的长任务')],
[sg.Output(size=(70, 12))],
[sg.Button('开始'),sg.Button('挂起'),sg.Button('恢复'), sg.Button('结束'), sg.Button('Exit')], ]
window = sg.Window('Multithreaded Window', layout)
# --------------------- EVENT LOOP ---------------------
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'):
break
elif event=='开始':
t=Mythrand()
t.start()
print('启动线程')
elif event == '挂起':
t.pause() #可能高亮不要紧可以执行
print('挂起线程')
elif event == '恢复':
t.resume()
print('恢复线程')
elif event == '结束':
t.stop()
print('结束线程')
window.close()
if __name__ == '__main__':
#方式1
the_gui
#方式2
#hwnd=threading.Thread(target=the_gui)
#hwnd.start()
#方式3
#hwnd=Process(target=the_gui)
#hwnd.start()
版权声明:本文为wangyunhe5120原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。