我用 PysimpleGUI 創建了一個具有多個按鈕的 GUI,其目的是用戶單擊一個按鈕并在第一個單擊按鈕的操作正在運行時繼續處理其他任務,并且當單擊按鈕的操作完成時,然后執行緒退出(破壞當前執行緒),
代碼拋出:RuntimeError:主執行緒不在主回圈中
有人可以幫我創建 _thread.start_new_thread 行程并合并到主回圈中,或者可能是避免 RuntimeError 的解決方案
對于我正在使用的執行緒:_thread
代碼:
class Windows:
def newOpenGraph(self, window, event, values):
'''
opens a new graph with no problem
'''
def newThread(self, window, event, values):
isRunning = True
if event == 'OPEN GRAPH':
_thread.start_new_thread(self.newOpenGraph, (window, event, values ))
isRunning = False
while isRunning:
schedule.run_pending()
time.sleep(1)
def mainLayout(self):
'''
layout frame work
'''
while True:
event, values = window.read()
if event == 'OPEN GRAPH':
# self.newOpenGraph(window, event, values)
self.newThread(window, event, values)
圖片:

uj5u.com熱心網友回復:
schedule在您的執行緒中使用庫,而不是在主回圈中,您的執行緒中也沒有 GUI 更新。
也許像這樣的代碼,
import time
import _thread
import schedule
import PySimpleGUI as sg
def func(window):
global i
window.write_event_value('Update', i)
i = 1
def new_thread(window, event, values):
global running
schedule.every().second.do(func, window=window)
running = True
while running:
schedule.run_pending()
time.sleep(0.1)
layout = [
[sg.Button("New"), sg.Button('Exit')],
[sg.Text('', size=40, key='STATUS')],
]
window = sg.Window("Multithread", layout, finalize=True)
i = 0
threads = []
while True:
event, values = window.read(timeout=100)
if event in (sg.WIN_CLOSED, 'Exit'):
running = False
break
elif event == 'New':
_thread.start_new_thread(new_thread, (window, event, values))
elif event == 'Update':
window['STATUS'].update(f'Index {values[event]}')
window.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405896.html
標籤:
下一篇:c語言中的while回圈行為
