728x90
반응형

 티스토리 

 

표준 출력 및 오류의 리다이렉션

안녕하세요! 오늘은 PySimpleGUI에서 sys 라이브러리를 이용하여 로그나 출력을 GUI 컴포넌트로 리다이렉션되지 않도록 설정하는 방법에 대해 알아보겠습니다. 개발하시는 도중 GUI에 로그나 출력이 나타나지 않게 하고 싶으시다면, 이 글이 도움이 될 거예요!

728x90

 

1. 코드리뷰 - 리다이렉션 설정

PysimpleGUI 사용시 리다이렉션이 변경되어 콘솔창에 출력안되는 문제를
아래와 같이 sys.stdout , sys.stderr 을 호출하여 복원 하는 코드로 해결.

1. PySimpleGUI와 sys 라이브러리의 기본 이해
먼저, PySimpleGUI는 파이썬에서 간단하게 GUI를 만들 수 있도록 도와주는 라이브러리랍니다. sys 라이브러리는 파이썬 인터프리터와 관련된 변수와 함수를 제공하는데, 여기에는 표준 입출력에 관련된 기능들도 포함돼 있죠.

2. 출력 리다이렉션 설정 방법
PySimpleGUI를 사용할 때는 특히 sys.stdout과 sys.stderr의 리다이렉션을 관리해야 합니다. 기본적으로 PySimpleGUI는 이 두 출력 스트림을 GUI 컴포넌트로 리다이렉션하는데요, 이를 원하지 않는다면 다음과 같이 설정할 수 있습니다.

import PySimpleGUI as sg
# PysimpleGUI 라이브러리 사용을 위해 호출하여 sg 이름으로 줄여서 사용
import sys
# 표준 출력 설정 라이브러리 호출

# 초기 표준 출력과 오류 스트림 저장
original_stdout = sys.stdout
original_stderr = sys.stderr
#윈도우 생성시 변경되는 리다이렉션을 다시 복원하기 위함

# 간단한 윈도우 생성 예제
layout = [[sg.Text("Hello from PySimpleGUI")], [sg.Button("OK")]]

# 윈도우 생성
window = sg.Window("Window Title", layout)

# 이벤트 루프
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'OK':
        break

window.close()

# 윈도우가 닫힌 후 콘솔에 메시지 출력을 위해 표준 스트림 복원
sys.stdout = original_stdout
sys.stderr = original_stderr

print("This will print to the console.")

3. 실용적인 팁
로그 파일 관리: 프로그램의 로그를 파일로 관리하고자 한다면 logging 모듈을 설정해서 로그 출력을 파일로 리다이렉션 할 수 있습니다.
오류 관리: 예기치 못한 오류를 사용자에게 보여주고 싶지 않을 때는 sys.stderr의 출력을 적절히 관리하세요.

마무리

- 이번 포스팅은 표준 출력을 이용하여 PysimpleGUI 종료후 콘솔 출력 문제 해결에 대해 알아봤습니다.

- 이 글을 통해 PySimpleGUI에서 sys 라이브러리를 활용해 로그와 출력을 GUI 컴포넌트로부터 독립적으로 관리하는 방법을 알아보았습니다. 개발하시는 과정에서 이 정보가 유용하게 사용되기를 바랍니다!

반응형
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

728x90
반응형
728x90
반응형

 티스토리 

기본 팝업창 예제로 공부해보자.

PySimpleGUI는 다양한 팝업 창을 포함하여 파이썬에서 GUI 어플리케이션을 만들기 위한 간단한 방법을 제공합니다. 다음은 PySimpleGUI에서 다양한 유형의 팝업 창을 사용하는 방법을 보여주는 예제 모음입니다. 자세한 문서와 더 많은 예제는 PySimpleGUI 공식 문서를 참고하세요.

1. Basic Popup ( 기본창 )

  The most basic form of popup to display a message:

가장 기본적인 팝업창 메세지 :

import PySimpleGUI as sg

sg.popup('CostZeroCode')

코드 실행결과(Output)

반응형

2. Popup with Title( 제목창이 있는 팝업창)

A popup window with a custom title:

import PySimpleGUI as sg

sg.popup('This is the main message', title='Custom Title')

3. Popup with Multiple Lines ( 여러줄로 메세지 출력하는 창)


To display multiple lines of text, you can separate text using a newline character \n:

여러개의 텍스트 라인으로 팝업창 생성

import PySimpleGUI as sg

sg.popup('Line 1\nLine 2\nLine 3', title='Multiple Lines')

코드 결과

 

4. Popup to Get User Input

To get input from the user through a popup:

import PySimpleGUI as sg

user_input = sg.popup_get_text('Please enter something')
sg.popup(f'You entered: {user_input}')

 

5. Popup to Show an Error ( 에러 메시지 창)

For showing error messages:

import PySimpleGUI as sg

sg.popup_error('An error has occurred!')

코드 실행결과

5. Popup to Display an OK/Cancel Dialog

To ask the user a yes/no question:

OK 또는 Cancel 버튼 선택창

import PySimpleGUI as sg

result = sg.popup_ok_cancel('Do you want to proceed?')
sg.popup(f'You chose: {result}')

코드 실행결과

 

6. Popup with Custom Button Text ( 사용자 정의 버튼과 결과 출력창)

To create a popup with custom button texts:

사용자 정의 버튼 과 선택한 버튼의 텍스트를 출력하는 팝업

import PySimpleGUI as sg

result = sg.popup('Custom button text example', button_type=sg.POPUP_BUTTONS_YES_NO, custom_text=('Proceed', 'Stop'))
sg.popup(f'You chose: {result}')

코드 실행결
버튼 클릭 결과

7. Popup for Folder Selection

To ask the user to select a folder:

import PySimpleGUI as sg

folder = sg.popup_get_folder('Please select a folder')
sg.popup(f'You selected: {folder}')

실행 결과

이 예제들은 PySimpleGUI에서 팝업의 기본 사용법을 다룹니다. 이 템플릿들로 실험해 보고 PySimpleGUI 문서를 확인하여 더 고급 기능과 사용자 정의 옵션을 알아보세요.

These examples cover basic usage of popups in PySimpleGUI. Experiment with these templates and check the PySimpleGUI documentation for more advanced features and customization options.

 

728x90

 

 

마무리

- 이번 포스팅은 PysimplgeGUI 기본 팝업창 생성에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

파일 브라우저, 파일 탐색기를 만들어 보자. 

Tkinter GUI 라이브러리가 있지만, 저는 PysimpleGUI이 좀더 동작이 가볍고 구현이 쉬워 자주 활용 하고있습니다.

PySimpleGUI:
PySimpleGUI는 Tkinter, Qt, WxPython, Remi를 래핑한 라이브러리입니다.
이름에서 알 수 있듯이, PySimpleGUI는 사용하기 쉬우며, 빠르게 GUI를 구축할 수 있도록 설계되었습니다.
코드가 더 짧고, 이해하기 쉬운 편이며, 빠르게 프로토타입을 만들기에 적합합니다.
다양한 테마와 위젯을 지원하여 멋진 인터페이스를 쉽게 만들 수 있습니다.
PySimpleGUI를 선택하는 것은 사용의 용이성과 빠른 개발이 필요할 때 좋은 선택일 수 있습니다. 복잡한 요구 사항이 없고, 간단하면서도 효율적인 GUI를 원한다면 PySimpleGUI가 매우 적합할 것입니다. 반면, 더 복잡하고 맞춤화된 GUI가 필요하다면 Tkinter를 고려해볼 수 있습니다.

Tkinter:
Tkinter는 파이썬의 표준 GUI 툴킷입니다.
광범위하게 사용되며, 파이썬 설치와 함께 기본적으로 제공됩니다.
Tkinter는 매우 유연하며, 맞춤화가 가능하지만, 복잡한 인터페이스를 만들 때는 코드가 길어질 수 있습니다.
플랫폼 독립적이며, 윈도우, 맥OS, 리눅스에서 잘 작동합니다.

1. 코드리뷰

이 PySimpleGUI 스크립트는 사용자가 파일을 선택할 수 있는 간단한 파일 브라우저 GUI를 구현하고 있습니다.

import PySimpleGUI as sg
import os

current_path = os.getcwd()  # Get the current working directory

layout = [
    [sg.Text("Choose a file: ")],
    [sg.InputText(key="-FILE-"), sg.FileBrowse(initial_folder=current_path, file_types=[("ALL Files", "*.*")])],
    [sg.Button("OK"), sg.Exit()]
]

window = sg.Window("File Browser", layout)

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, "Exit"):
        break
    elif event == "OK":
        file_path = values["-FILE-"]
        if file_path:
            print(f"Loaded File: {file_path}")
        else:
            print("No file selected.")

window.close()

위의 sg.Exit() 버튼은 sg.Button('EXIT')로 변경해서 사용하셔도 됩니다.

실행결과

코드 분석
모듈 임포트: PySimpleGUI와 os 모듈을 사용합니다. PySimpleGUI는 GUI를 만드는데 사용되고, os는 현재 작업 디렉토리 경로를 얻는데 사용됩니다.
현재 디렉토리 경로: os.getcwd()를 사용하여 현재 실행중인 디렉토리 위치를 가져옵니다.
GUI 레이아웃 설정: 파일을 선택할 수 있는 인터페이스와 'OK' 및 'Exit' 버튼이 포함된 GUI 레이아웃을 정의합니다.
이벤트 루프: 사용자의 입력을 기다리고, 'OK' 버튼을 누르면 파일 경로를 출력하고, 'Exit' 버튼이나 창 닫기를 통해 프로그램을 종료합니다.

이벤트 처리 개선: if event in (sg.WIN_CLOSED, "Exit") 부분은 명확하지만, elif event == "OK"는 else로 대체할 수 있습니다. 현재 구조에서는 'OK' 외의 다른 이벤트는 발생하지 않기 때문입니다.

리소스 관리: GUI 프로그램에서는 리소스 관리도 중요합니다. PySimpleGUI는 내부적으로 리소스 관리를 잘 하지만, 크고 복잡한 응용 프로그램에서는 리소스 관리를 더 신경 써야 할 수 있습니다.

오류 처리: 사용자가 파일을 선택하지 않고 'OK'를 누를 경우를 대비해 오류 처리를 추가하는 것이 좋습니다.

다른 예제 코드: 

import PySimpleGUI as sg
import os

def create_file_browser():
    # 현재 작업 디렉토리를 가져옵니다.
    current_path = os.getcwd()

    # 레이아웃을 정의합니다.
    layout = [
        [sg.Text("Choose a file: ")],
        [sg.InputText(key="-FILE-"), sg.FileBrowse(initial_folder=current_path, file_types=[("ALL Files", "*.*")])],
        [sg.Button("Open"), sg.Button("Cancel")]
    ]

    # 윈도우 객체를 생성합니다.
    window = sg.Window("File Browser", layout)

    # 이벤트 루프
    while True:
        event, values = window.read()
        if event in (None, "Cancel"):
            break
        if event == "Open":
            file_path = values["-FILE-"]
            if file_path:
                sg.popup(f"You selected: {file_path}")
            else:
                sg.popup("No file selected.")
    
    window.close()

# 파일 브라우저 실행
create_file_browser()

- os.getcwd() 는 현재 작업 디렉토리를 가져오는 데 사용됩니다.

- 레이아웃 생성: GUI의 레이아웃을 정의합니다. 여기에는 파일 선택을 위한 InputText와 FileBrowse 버튼, 그리고 'Open'과 'Cancel' 버튼이 포함됩니다.

- 이벤트 루프: 사용자의 입력을 처리하는 이벤트 루프입니다. 사용자가 파일을 선택하고 'Open'을 클릭하면 선택된 파일 경로를 팝업으로 표시합니다. 'Cancel'을 클릭하거나 창을 닫으면 프로그램이 종료됩니다.

2. 여러파일 또는 폴더 선택

sg.FileBrowse()에서 sg.FilesBrowse()로 변경한다.
values['-FILE-']를 values['-FILE-'].split(';')로 세미콜론 단위로 파일 정보를 가져온다.

import PySimpleGUI as sg

# Create the layout for the file browser
layout = [[sg.Text('Select multiple files:')],
          [sg.Input(key='-FILES-'), sg.FilesBrowse()],
          [sg.Button('Submit'), sg.Button('Cancel')]]

# Create the window
window = sg.Window('File Browser', layout)

# Event loop
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == 'Cancel':
        break
    elif event == 'Submit':
        selected_files = values['-FILES-'].split(';')
        print('Selected Files:', selected_files)

# Close the window
window.close()

실행결과

 

2. 폴더(디렉토리) 의 정보를 가져오기.

폴더 정보를 가져는 연습을 해보자.

이번에는 한글을 적용해서 만든 코드 예제 입니다.

import PySimpleGUI as sg

# 파일 브라우저를 위한 레이아웃 생성
layout = [[sg.Text('폴더를 선택하세요:')],
          [sg.Input(key='-FOLDER-'), sg.FolderBrowse()],
          [sg.Button('확인'), sg.Button('취소')]]

# 창 생성
window = sg.Window('파일 브라우저', layout)

# 이벤트 루프
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == '취소':
        break
    elif event == '확인':
        selected_folder = values['-FOLDER-']
        print('선택된 폴더:', selected_folder)

# 창 닫기
window.close()

실행결과

 

 

마무리

- 이번 포스팅은 PySimpleGUI의 파일 브라우저를 사용하여 Python GUI 애플리케이션에서 파일과 폴더를 선택할 수 있는 기본적인 사용법을 알아 보았습니다.

 

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

 

728x90
반응형
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
반응형
728x90
반응형

 티스토리 

 

GUI로 여러 폴더의 이름을 선택한 값 구하기

 폴더별로 동작하는 GUI 앱을 만들어 보자. 

1. 코드리뷰

 

import PySimpleGUI as sg

# 폴더 목록을 보여주고 선택할 수 있도록 하는 함수
def select_folders():
    # 폴더 목록을 저장할 리스트
    folder_list = []
    # 폴더 선택 창의 레이아웃
    layout = [
        [sg.Text('폴더를 선택하세요.')],
        [sg.Listbox(values=folder_list, size=(40, 10), key='-FOLDER-LIST-', select_mode=sg.LISTBOX_SELECT_MODE_EXTENDED)],
        [sg.Button('추가'), sg.Button('제거'), sg.Button('확인'), sg.Button('취소')]
    ]
    # 폴더 선택 창을 생성하고 이벤트와 값들을 반환받음
    window = sg.Window('폴더 선택', layout)
    while True:
        event, values = window.read()
        # 취소 버튼을 누르거나 창을 닫으면 None을 반환하고 종료함
        if event in (sg.WIN_CLOSED, '취소'):
            window.close()
            return None
        # 추가 버튼을 누르면 폴더를 하나 선택하고 리스트에 추가함
        elif event == '추가':
            folder = sg.popup_get_folder('폴더를 선택하세요.')
            if folder is not None and folder not in folder_list:
                folder_list.append(folder)
                window['-FOLDER-LIST-'].update(folder_list)
        # 제거 버튼을 누르면 리스트에서 선택한 폴더를 제거함
        elif event == '제거':
            selected_folders = values['-FOLDER-LIST-']
            if selected_folders:
                for folder in selected_folders:
                    folder_list.remove(folder)
                window['-FOLDER-LIST-'].update(folder_list)
        # 확인 버튼을 누르면 선택한 폴더들의 리스트를 반환하고 종료함
        elif event == '확인':
            window.close()
            return folder_list  # 수정: folder_list를 반환하도록 수정

# 폴더 선택 창을 띄우고 선택한 폴더들의 경로를 출력하는 메인 함수
def main():
    # 폴더 선택 창을 띄우고 선택한 폴더들의 리스트를 folders 변수에 저장함
    folders = select_folders()
    # folders 변수가 None이 아니면 선택한 폴더들의 경로를 출력함
    if folders is not None:
        print(f'선택한 폴더들의 경로는 다음과 같습니다.')
        for folder in folders:
            print(folder)
    # folders 변수가 None이면 폴더를 선택하지 않았다고 출력함
    else:
        print('폴더를 선택하지 않았습니다.')

main()

 

마무리

- 이번 포스팅은 Folder Browser 만들기 에 대해 알아봤습니다.

 

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

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

특정 날짜간의 데이터 분석 조건별 날짜 필터링

이 코드는 pandas를 사용하여 CSV 파일에서 데이터를 읽어와서 특정 날짜 범위에 해당하는 데이터를 추출하는 작업

1. 코드 리뷰

import pandas as pd

# CSV 파일 또는 다른 소스에서 데이터프레임을 읽어옴 (예: read_csv)
df = pd.read_csv('your_data.csv', parse_dates=['date_column'])

# 특정 날짜 이후의 데이터 추출
start_date = '2023-01-01'
filtered_df = df[df['date_column'] >= start_date]

# 특정 날짜 이전의 데이터 추출
end_date = '2023-01-31'
filtered_df = df[df['date_column'] <= end_date]

위의 내용으로 정리한 코드 

import pandas as pd

# 데이터 읽기
df = pd.read_csv('your_data.csv', parse_dates=['date_column'])

# 특정 날짜 범위 추출
start_date = '2023-01-01'
end_date = '2023-01-31'

# 조건을 합쳐서 한 번에 필터링
filtered_df = df[(df['date_column'] >= start_date) & (df['date_column'] <= end_date)]

두 번의 필터링을 하나로 합치면 코드가 간결해지고 가독성이 향상됩니다. 또한, 필터링된 데이터프레임을 생성하고 저장하는 데 필요한 메모리 및 연산 비용을 줄일 수 있습니다.

필터링된 데이터를 보존하는 방법은 여러 가지가 있습니다.

새로운 변수에 할당: 필터링된 데이터를 새로운 변수에 할당하여 원본 데이터를 보존할 수 있습니다.
복사: copy() 메서드를 사용하여 데이터프레임을 복사하고, 이후에 필터링을 적용합니다.
인덱싱: 필터링된 결과를 인덱싱하여 새로운 데이터프레임을 생성합니다.

마무리

- 이번 포스팅은 판다스 데이터 프레임의 날짜별 추출 조건별 추출 대해 알아봤습니다.

 

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

 

 

728x90
반응형
728x90
반응형

filenames = sg.popup_get_file('Select Files', title = "File Selector" , mutilple_files = True)

filenames = filenames.split(";")
#세미콜론 기준으로 파일정보들을 가져옴
#ex : a;b;c;d;e;.....
filenames = filename.split("/")
#filename[-1]  파일명만 획득
# 디렉토리 이름의 '/' 삭제 처리후
리스트의 마지막 항목을 가져오면
파일 이름만 획득

728x90
반응형
728x90
반응형

 티스토리 

 

PysimpleGUI로 Ticket 예매창을 만들어보자. 

아래 그림과 같은 달력 모듈과 함께 여러가지 입력창으로 심플한 Ticket 예매창을 만들어보자


1. 테마설정 방법

  - sg.theme_previewer(columns=8, scrollable=True) 를 실행하여 아래 그림처럼 원하는 테마를 설정할수있다.
  - sg.theme('Reds') # 원하는 테마의 이름을 입력하여 설정

 

2. 구현 코드리뷰

구현한 코드 내용을 자세하게 리뷰를 해보자.

import PySimpleGUI as sg

# sg.theme_previewer(columns=8, scrollable=True) # 원하는 창 테마 종류를 확인 

sg.theme('Reds') # 원하는 테마의 이름을 입력하여 설정

layout = [[sg.Text("Type your name"), sg.Input(key='-NAME-', do_not_clear=True, size=(15, 1))],
          [sg.Text("Type your Ticket Number"), sg.Input(key='-TICKET_NUMBER-', do_not_clear=True, size=(10, 1))],
          [sg.Input(key='-DAY1-', size=(30,1)), sg.CalendarButton("Book a DATE", close_when_date_chosen=True,  target='-DAY1-', location=(0,0), no_titlebar=False )],
          [sg.Text('Select your Items',size=(30, 1), font='Courier 15',justification='left')],
          [sg.Listbox(values=['Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6'], size=(40, 5), select_mode='single', key='-ITEMS-')],
          [sg.Radio("OPTION1", "RADIO", key='-OPT1-'), sg.Radio("OPTION2", "RADIO", key='-OPT2-')],
          [sg.Button('Book a Ticket'), sg.Exit()]
]

window = sg.Window('costzerocode.tistory.com', layout)

def ticket_Info(values):
    ticket_var = "-----Result of Information-----"
    name = '\nName: ' + values['-NAME-']
    ticket_var += name
    TICKET_NUMBER = '\nTicket Number: ' + values['-TICKET_NUMBER-']
    ticket_var += TICKET_NUMBER
    option = '\noption: '
    if values['-OPT2-']:
        option += 'OPT2'
    else:
        option += 'OPT1'
    ticket_var += option
    item_val = '\nITEM : ' + values['-ITEMS-'][0]
    ticket_var += item_val
    return ticket_var
   


while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    elif event == 'Book a Ticket':
        sg.popup(ticket_Info(values))
window.close()

마무리

- 이번 포스팅은 PySimpleGUI로 달력을 활용한 간단한 메뉴를 만드는법에 대해 알아봤습니다. 

728x90
반응형

+ Recent posts