본문 바로가기

wxPython

파이썬 GUI, 로딩시 로고화면 넣기, 스플래시 스크린 Advanced Splash

반응형

 

Advanced Splash를 이용한 로고화면 넣기

 

 

개요 

    프로그램이 무거워 실행이 느리거나 오래 걸린다면 사용자는 기다리기 지루할 것이다. 혹은 심각할 경우 프로그램이 오류가 있다고 생각할 수도 있다. 프로그램이 켜진 순간 부터 완전히 로딩될 때 까지 걸리는 시간 사이를 로고 이미지로 채운다면 사용자는 조금 덜 지루하고 프로그램 실행에 대한 기대감도 높아져 꽤나 유용할 것이다. 이를 구현한 것이 바로 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()

 

 

 

 

 

 

    도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :) 

 

반응형