diff --git "a/Readme_\353\263\264\352\263\240\354\204\234.md" "b/Readme_\353\263\264\352\263\240\354\204\234.md" index 3e5286f8315d0dd4d9a6e2238b0dc3bdfb61bcb7..d75451ede95d3136b36cf268f65cc7cc3ede4e24 100644 --- "a/Readme_\353\263\264\352\263\240\354\204\234.md" +++ "b/Readme_\353\263\264\352\263\240\354\204\234.md" @@ -12,9 +12,100 @@ # 개선 과정 -## WxWidget +## wxWidget +다양한 플랫폼에서 사용되는 프로그램의 경우, 하나의 코드로 여러 플랫폼에서 작동하는 프로그램을 빌드할 수 있게 해주는 도구가 필요하다고 생각했습니다. 그래서 해당 프로그램을 찾기 위해 Audacity의 매뉴얼, 설정 등 다양한 메뉴를 살펴보았습니다. 그 중, Audacity 정보 페이지를 살펴보니 Audacity의 빌드 정보가 있었습니다. 해당 페이지를 통해 Audacity는 wxWidgets라는 크로스 플랫폼 GUI 라이브러리를 사용한다는 것을 알게 되었습니다. +wxWidgets는 여러 운영체제에서 동일한 소스 코드로 애플리케이션을 빌드할 수 있게 해주는 라이브러리로, Audacity가 다양한 플랫폼에서 작동할 수 있도록 도와줍니다. wxWidgets를 통해 Audacity를 빌드하므로, wxWidgets의 설정 파일을 수정하면 폰트 변경이 가능할 것이라고 판단했습니다. 이와 같은 접근을 통해 프로젝트를 진행하여 Audacity의 폰트 및 해상도 문제를 개선하고자 합니다. + +## wxFormBuilder + +이를 위해 wxWidgets의 구조를 파악해야겠다고 생각했습니다. Audacity의 구조를 이해하기 위해 wxWidgets를 기반으로 하는 GUI 디자이너 툴인 wxFormBuilder를 활용했습니다. wxFormBuilder는 wxWidgets 애플리케이션을 개발하는 데 필요한 GUI 레이아웃을 시각적으로 설계하고, 이를 코드로 생성하는 데 사용됩니다. wxFormBuilder의 기능을 활용해 창(window), 박스 사이저(box sizer), 메뉴바(menubar), 패널(panel) 등을 직접 생성해보며 wxWidgets를 구성하는 요소들 간의 관계를 파악하였습니다. + +wxFormBuilder를 통해 최상위 윈도우가 생성되고, 그 안에 다양한 요소들이 존재한다는 것을 알 수 있었습니다. 메뉴바와 상태바는 윈도우에 바로 포함될 수 있지만, 패널과 프레임, 그리고 텍스트와 같은 요소들은 바로 윈도우에 포함될 수 없고 박스 사이저와 같은 레이아웃 매니저를 통해 구성해야 함을 알게 되었습니다. 또한, wxWidgets에서는 윈도우 내에 다른 윈도우가 포함될 수 있는 계층 구조를 지원하며, 패널 내에도 추가적인 패널이 포함될 수 있습니다. 각 요소들의 배치와 관계를 시각적으로 설계하는 과정을 통해 wxWidgets의 다양한 구성 방식을 학습하였습니다. + +## wxPython + +udacity 코드에 직접적으로 적용하기 전에 wxPython을 활용하여 간단한 프로그램을 생성하고 폰트 변경을 실험하는 결정을 내렸습니다. wxPython은 wxWidgets와 유사한 기능을 제공하는 Python용 GUI 라이브러리입니다. 이를 통해 폰트 변경이 전체 프로그램에 어떻게 적용되는지를 실험하고자 했습니다. + +우선, 간단한 창(window)에 텍스트를 추가하고 이 텍스트의 폰트를 변경하는 것으로 시작했습니다. 이 단순한 예제를 통해 폰트 설정이 제대로 동작하는지 확인했습니다. 그 다음으로는 패널(panel)과 그 안에 추가적인 패널이 포함된 복잡한 구조에서도 동일한 폰트 변경 실험을 진행했습니다. 이 과정을 통해 폰트 변경 코드를 어느 위치에 넣어야 전체 프로그램에 일괄적으로 적용되는지를 확인하고자 했습니다. + +여러 구조에서 폰트 변경을 시도한 결과, 폰트 설정 코드를 상위 구조에 위치시키면 하위 구조들도 해당 폰트로 변경된다는 사실을 알 수 있었습니다. 즉, 프로그램 전체의 폰트를 수정하기 위해서는 가장 최상위 구조인 최상위 윈도우에 폰트 설정 코드를 넣어야 한다는 것을 파악했습니다. + +최종적으로 사용한 코드 +``` mport wx +import wx.xrc +import gettext +_ = gettext.gettext + + +class MyFrame1 ( wx.Frame ): + + def __init__( self, parent ): + wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 641,415 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) + new_font = wx.Font(14, wx.DEFAULT, wx.ITALIC, wx.BOLD) + self.SetFont(new_font) + + self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) + + bSizer1 = wx.BoxSizer( wx.VERTICAL ) + + self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer2 = wx.BoxSizer( wx.VERTICAL ) + + + self.m_panel2 = wx.Panel( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer3 = wx.BoxSizer( wx.VERTICAL ) + + self.m_panel3 = wx.Panel( self.m_panel2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) + bSizer3.Add( self.m_panel3, 1, wx.EXPAND |wx.ALL, 5 ) + + self.m_button3 = wx.Button( self.m_panel2, wx.ID_ANY, _(u"MyButton2"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer3.Add( self.m_button3, 0, wx.ALL, 5 ) + + + self.m_panel2.SetSizer( bSizer3 ) + self.m_panel2.Layout() + bSizer3.Fit( self.m_panel2 ) + bSizer2.Add( self.m_panel2, 1, wx.EXPAND |wx.ALL, 5 ) + + self.m_button2 = wx.Button( self.m_panel1, wx.ID_ANY, _(u"MyButton1"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer2.Add( self.m_button2, 0, wx.ALL, 5 ) + + + self.m_panel1.SetSizer( bSizer2 ) + self.m_panel1.Layout() + bSizer2.Fit( self.m_panel1 ) + bSizer1.Add( self.m_panel1, 1, wx.EXPAND |wx.ALL, 5 ) + + self.m_button1 = wx.Button( self, wx.ID_ANY, _(u"MyButton"), wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer1.Add( self.m_button1, 0, wx.ALL, 5 ) + + + self.SetSizer( bSizer1 ) + self.Layout() + self.m_statusBar1 = self.CreateStatusBar( 1, wx.STB_SIZEGRIP, wx.ID_ANY ) + self.m_toolBar1 = self.CreateToolBar( wx.TB_HORIZONTAL, wx.ID_ANY ) + self.m_toolBar1.Realize() + + + self.Centre( wx.BOTH ) + + def __del__( self ): + pass + + +if __name__ == '__main__': + app = wx.App(False) + frame = MyFrame1(None) + frame.Show() # Show the frame + app.MainLoop() +``` + + +## Audacity 적용 + +### 관우 여기에 내용 작성해줘 # 코드와 사진첨부할 것. 발생했던 문제점을 하나하나 개선하는 느낌으로 @@ -22,4 +113,9 @@ # 느낀점 -# 출처 \ No newline at end of file + + +# 출처 +wxWidgets 문서 : https://docs.wxwidgets.org/3.0/<br/> +wxFormBuilder 사용법 : https://blog.naver.com/dotoricoding/221112038209<br/> +wxWidgets 폰트 설정 방법 : https://forums.wxwidgets.org/viewtopic.php?p=214285 \ No newline at end of file