728x90
반응형

 티스토리 

PySimpleGUI

 tkinter 보다 저는 주로 간단하게 PySimpleGUI을 주로 이용합니다.
모듈이름 처럼 간단한 주요 10가지 예제를 알아 봅시다.

1. 코드리뷰- 텍스트 입력창 만들기

  이 예제는 간단한 텍스트 입력 윈도우를 생성합니다. "이름을 입력하세요."라는 텍스트와 입력 필드, 그리고 "확인" 버튼으로 구성되어 있습니다. "확인" 버튼을 누르면 입력된 텍스트가 출력됩니다.

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("이름을 입력하세요.")],
    [sg.InputText()],
    [sg.Button("확인")]
]
window = sg.Window("간단한 텍스트 입력", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 입력된 텍스트 출력
    print(values["input_text"])

# 윈도우 종료
window.close()

결과 화면 : 

2. 코드리뷰 - 텍스트 출력

텍스트를 윈도우 창에 출력

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("오늘은 화요일입니다.")]
]
window = sg.Window("텍스트 출력", layout)

# 윈도우 표시
window.read()

# 윈도우 종료
window.close()

결과 :

 

3. 코드리뷰 - 콤보 박스

이 예제는 콤보박스를 사용하여 이름을 선택하는 윈도우를 생성합니다. "선수를 선택하세요."라는 텍스트와 콤보박스, 그리고 "확인" 버튼으로 구성되어 있습니다. "확인" 버튼을 누르면 선택된 선수 이름이 출력됩니다.

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("축구 선수를 선택하세요.")],
    [sg.Combo(key='combo' ,values=["손흥민", "이강인", "김민재"],  size=(30, 50))],
    [sg.Button("확인")]
]
window = sg.Window("콤보박스", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 선택된 이름 출력
    print(values["combo"])

# 윈도우 종료
window.close()

결과 화면 :

 

4. 코드리뷰 - 라디오 버튼

 

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("성별을 선택하세요.")],
    [sg.Radio("남성", "gender", key = 'gender', default=True)],
    [sg.Radio("여성", "gender", key = 'gender')],
    [sg.Button("확인")]
]
window = sg.Window("라디오 버튼", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 선택된 성별 출력
    print(values["gender"])

# 윈도우 종료
window.close()

결과 화면 :

 

5. 코드리뷰 -  체크박스

이 예제는 체크박스를 사용하여 취미를 선택하는 윈도우를 생성합니다. "취미를 선택하세요."라는 텍스트와 체크박스 3개, 그리고 "확인" 버튼으로 구성되어 있습니다. "확인" 버튼을 누르면 선택된 취미가 출력됩니다.

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("취미를 선택하세요.")],
    [sg.Checkbox("독서", "hobby")],
    [sg.Checkbox("운동", "hobby")],
    [sg.Checkbox("여행", "hobby")],
    [sg.Button("확인")]
]
window = sg.Window("체크박스", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 선택된 취미 출력
    hobbies = []
    for key, value in values.items():
        if value:
            hobbies.append(key)
    print(hobbies)

# 윈도우 종료
window.close()

결과

 

6. 코드리뷰 -  리스트 박스

참고 : size() 속성을 (-1, -1)로 설정하면 콤보 박스의 크기가 윈도우 크기에 맞게 자동으로 조정됩니다.

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("선수를 선택하세요.")],
    [sg.Listbox(values=["손흥민", "김민재", "이강인", "황희찬"], size=(10,5), key='listbox')],
    [sg.Button("확인")]
]
window = sg.Window("리스트박스", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 선택된 이름 출력
    print(values["listbox"])

# 윈도우 종료
window.close()

결과

 

7. 코드리뷰 -  슬라이더

 

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("밝기를 조절하세요.")],
    [sg.Slider(range=(0, 100), default_value=50, orientation="horizontal")],
    [sg.Button("확인")]
]
window = sg.Window("슬라이더", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 슬라이더 값 출력
    print(values["slider"])

# 윈도우 종료
window.close()

결과

 

 

8. 코드리뷰 -  텍스트 에디터 , 여러 문장 출력하기

이 예제는 텍스트 에디터를 사용하여 텍스트를 입력하는 윈도우를 생성합니다.

import PySimpleGUI as sg

# 윈도우 생성
layout = [
    [sg.Text("텍스트를 입력하세요.")],
    [sg.Multiline(size=(50, 10),key='multiline')],
    [sg.Button("확인")]
]
window = sg.Window("텍스트 에디터", layout)

# 이벤트 처리
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

    # 입력된 텍스트 출력
    print(values["multiline"])

# 윈도우 종료
window.close()

결과

 

마무리

- 이번 포스팅은 PysimpleGUI 주요 10가지 기능을 예제 코드로 알아봤습니다.

- 주요 에러 원인 분석 :

print(values["input_text"])
     ~~~~~~^^^^^^^^^^^^^^
KeyError: 'input_text'

위와 같이 key 에러가 나면..


오류의 원인:

해당 오류는 values 딕셔너리에 "input_text" 키가 존재하지 않아 발생하는 KeyError입니다. 이는 보통 다음과 같은 이유에서 발생할 수 있습니다.

입력 엘리먼트의 이름이 다름:

코드에서 입력 엘리먼트의 이름이 input_text가 아닌 다른 이름으로 설정되었을 수 있습니다. 코드에서 입력 엘리먼트를 생성하는 부분을 확인하여 올바른 이름을 사용해야 합니다.
윈도우 레이아웃에 입력 엘리먼트가 없음:

윈도우 레이아웃에 sg.InputText()를 사용하여 입력 엘리먼트를 추가하지 않았거나, 추가한 입력 엘리먼트의 이름이 input_text가 아닌 경우 이 오류가 발생합니다.
이벤트 발생 전 접근 시도:

window.read() 함수를 호출하여 이벤트를 발생시키기 전에 values["input_text"]에 접근하려고 하면 이 오류가 발생합니다. 입력 값을 가져오려면 이벤트가 발생한 후에 접근해야 합니다.
해결 방안:

입력 엘리먼트 이름 확인:

코드에서 입력 엘리먼트를 생성하는 부분을 찾아 정확한 이름을 확인합니다. 예를 들어, sg.InputText(key="my_input")와 같이 생성했다면 values["my_input"]으로 접근해야 합니다.
레이아웃에 입력 엘리먼트 추가:

윈도우 레이아웃에 sg.InputText()를 사용해 입력 엘리먼트를 추가하고, 이름을 input_text로 설정합니다.
이벤트 발생 후 접근:

window.read() 함수 호출 후 이벤트 루프에서 입력 값을 가져옵니다

 

궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형

+ Recent posts