[python] PySimpleGUI에서 멀티스레딩을 사용하는 방법은 무엇인가요?
PySimpleGUI는 사용하기 쉽고 직관적인 사용자 인터페이스를 제공하는 파이썬 GUI 라이브러리입니다. 그러나 때로는 다른 작업을 처리하거나 긴 실행 시간이 필요한 작업을 동시에 처리할 필요가 있습니다. 이를 위해 멀티스레딩을 사용할 수 있습니다.
여기 PySimpleGUI에서 멀티스레딩을 사용하는 간단한 예제가 있습니다.
import PySimpleGUI as sg
import threading
# GUI 업데이트를 위한 스레드
def update_gui_thread(window):
while True:
# GUI 업데이트 코드
# 예를 들면 window['-OUTPUT-'].update(...)
sg.PopupNonBlocking('스레드 업데이트 예제', '프로그램과 스레드가 병행 실행 중입니다.')
# 메인 스레드
def main_thread():
# GUI 생성 코드
layout = [[sg.Text('버튼을 클릭하면 스레드가 시작됩니다.')],
[sg.Button('시작', key='-START-'), sg.Button('종료', key='-EXIT-')],
[sg.Text('', key='-OUTPUT-')]]
window = sg.Window('멀티스레딩 예제', layout)
while True:
event, values = window.read()
if event == '-START-':
# GUI 업데이트를 위한 스레드 실행
thread = threading.Thread(target=update_gui_thread, args=(window,), daemon=True)
thread.start()
elif event == '-EXIT-' or event == sg.WINDOW_CLOSED:
break
window.close()
# 메인 함수
if __name__ == "__main__":
main_thread()
이 예제에서는 PySimpleGUI의 멀티스레딩을 구현하기 위해 threading
모듈을 사용합니다. main_thread()
함수는 메인 스레드로서 GUI를 생성하고 이벤트를 처리합니다. ‘시작’ 버튼을 클릭하면 update_gui_thread()
함수를 실행하는 스레드를 생성하고 GUI를 업데이트합니다. 선택한 이벤트가 ‘종료’ 버튼이거나 창이 닫히면 프로그램 실행이 종료됩니다.
참고로 daemon=True
로 설정된 스레드는 메인 프로그램이 종료될 때 자동으로 종료되는 백그라운드 스레드입니다.
이와 같이 PySimpleGUI에서 멀티스레딩을 사용할 수 있습니다. 하지만 GUI 업데이트와 관련된 작업을 스레드로 분리할 때는 주의해야 합니다. 다른 스레드에서 GUI를 업데이트하기 위해선 PySimpleGUI의 window[]
메소드를 사용해야 하며, 참조하는 요소가 유효한 동기화를 보장해야 합니다.