개요
프로그램이 무거워 실행이 느리거나 오래 걸린다면 사용자는 기다리기 지루할 것이다. 혹은 심각할 경우 프로그램이 오류가 있다고 생각할 수도 있다. 프로그램이 켜진 순간 부터 완전히 로딩될 때 까지 걸리는 시간 사이를 로고 이미지로 채운다면 사용자는 조금 덜 지루하고 프로그램 실행에 대한 기대감도 높아져 꽤나 유용할 것이다. 이를 구현한 것이 바로 AdvancedSplash(wx.lib.agw.advancedsplash.AdvancedSplash) 기능이다. wxPython 용어로는 "스플래시 스크린" 이라고 부른다.
AdvancedSplash
AdvancedSplash(wx.lib.agw.advancedsplash.AdvancedSplash)는 스플래시 스크린이라고 부르며, 기존 스플래시스크린(wx.adv.SplashScreen) 클래스를 복제하여 기능을 조금 더 추가한 클래스이다. 사용법은 어렵지 않다. 프로그램 실행시 앞단에서 선언을 한 뒤에 프로그램이 다 실행되고 나면 AdvancedSplash.Close()를 한 줄 추가하여 스플래시스크린을 닫아주기만 하면 된다.
as = AdvancedSplash(parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.FRAME_NO_TASKBAR | wx.FRAME_SHAPED | wx.STAY_ON_TOP,
bitmap=None, timeout=5000,
agwStyle=AS_TIMEOUT | AS_CENTER_ON_SCREEN, shadowcolour=wx.NullColour)
""" 프로그램 실행코드 시작 """
""" 프로그램 실행코드 끝 """
as.Close()
parent: 스플래시 스크린의 부모 오브젝트
pos: 스크린 상에서 위치
size: 크기
style: 스플래시 스크린의 프레임 스타일
bitmap: 스플래시 스크린에 사용될 이미지
timeout: milliseconds int 값 시간. 타임아웃 수치만큼 시간이 지나면 스플래시 스크린이 자동으로 사라진다. AS_TIMEOUT 옵션과 함께 사용한다.
agwStyle: 스플래시 스크린의 전체적인 스타일 설정. 타임아웃, 스크린에서 위치 등을 설정할 수 있다.
shadowcolour: agwStyle을 AS_SHADOW_BITMAP로 지정한 경우, 셰도우 컬러만 마스킹된다. 배경색을 지울 때 사용한다.
예제
아래 예제는 프로그램 로딩이 3초가 걸리는 프로그램의 로딩시간을 지루하지 않게 스플래시 스크린으로 로고를 띄워주는 예제이다. 로딩에 필요한 이미지는 Flaticon(https://www.flaticon.com/kr/) 에서 무료로 다운로드 받을 수 있다.
from wx.lib.agw.aui.framemanager import *
import wx.lib.agw.advancedsplash as AS
class Example(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'Microsoft Excel', size=(400,300))
# 프로그램이 실행되는 동안 Logo 띄우기 (Splash)
# 로고에 들어갈 이미지 선언
imagePath = "d:\icon/ms.png"
bitmap = wx.Bitmap(imagePath, wx.BITMAP_TYPE_PNG)
# 스플래시 선언
splash = AS.AdvancedSplash(self, bitmap=bitmap,
agwStyle=AS.AS_CENTER_ON_SCREEN | AS.AS_SHADOW_BITMAP,
shadowcolour=wx.BLACK)
# 스플래시에 텍스트 쓰기
splash.SetText("마이크로소프트 엑셀\n(로딩중입니다...)")
# 텍스트 글꼴
font = wx.Font(14, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
# 텍스트 셋팅
splash.SetTextFont(font)
# 텍스트 위치 설정
splash.SetTextPosition((30,135))
# 텍스트 색상 설정
splash.SetTextColour(wx.BLACK)
# 프로그램 로딩 시간을 가상으로 설정
# 로딩이 3초 걸린다고 가정한다
wx.Sleep(3)
# 사용자 코드
panel = wx.Panel(self, -1)
self.Center()
# 프로그램 로딩이 완료되면 splash를 닫아준다.
splash.Close()
if __name__=="__main__":
app = wx.App()
frame=Example(parent=None, id=-1)
frame.Show()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 공지메시지 Notification Message (0) | 2023.05.26 |
---|---|
파이썬 GUI, Matplotlib 그래프, 차트, 이미지 띄우기 (0) | 2023.05.03 |
파이썬 GUI, Aui툴바 AuiToolBar (0) | 2023.04.29 |
파이썬 GUI, 툴바 wx.ToolBar (0) | 2023.04.22 |
파이썬 GUI, 파일컨트롤 wx.FileCtrl (0) | 2023.03.26 |