스마트웹앱콘텐츠전문가/파이썬(플라스크, 데이터 처리)

[그래픽 인터페이스]

9D4U 2018. 1. 25. 17:29
728x90
반응형

1. wxPython 애플리케이션의 시작과 끝, wx.App 클래스

- 가장 먼저 알아둬야 할 친구는 wx.App 클래스임.

- wx.App 클래스가 wxPython 시스템을 초기화하고 구동하는 역할을 갖고 있음 + 이벤트를 감시하고 처리하는 이벤트 루프를 수행.

Oninit() 메소드


2. GUI의 창틀 : wx.Frame 클래스

-대개는 wx.Frame을 그냥 사용하지 않고 파생 클래스를 만들어 씀. 파생 클래스 안에 여러가지 위젯으로 GUI를 구성해서 넣는 것임.

○ wx.Frame의 파생클래스로 윈도우 만들어 띄우기

- wx 모듈을 반입하고 wx.Frame을 상속하는 클래스를 정의하기만 하면 될 뿐.

○ wx.Frame의 이벤트와 이벤트 처리기 연결하기

-이벤트 : 행사, 사건 -> wx.Frmae을 포함해서 wxPython의 각 위젯에는 일어날 수 있는 사건들이 미리 정의되어 있음.

- 이벤트 처리기(Event Handler) : 이벤트가 발생했을 때 호출되는 함수나 메소드를 말함. = 보통의 함수/메소드와 같음. 다른 점은 'event 매개변수'를 받는다는 점.

정의 해둔 이벤트 처리기는 Bind() 메소드를 통해 연결함.

Bind()메소드의 첫 번째 매개변수는 이벤트, 두번째는 이벤트 처리기 임.

○ wx.Frame의 속성 조절하기

- wx.Frame의 속성 몇 가지(크기, 색상, 스타일)를 변경하는 방법 알아보기.

● 크기 변경 : SetSize(폭, 높이) 메소드를 이용.

● 윈도우 내부 창의 배경색 : SetBackgroundColour() 메소드를 이용 <- 매개변수로 wx.Colour 객체를 입력받음.

frame = wx.Frmae()

frame.SetBackgroundColour(wx.Colour(255, 0, 0, 0)) # 윈도우 배경색을 빨간색으로 설정

● 윈도우의 스타일 조정

- 타이틀 바

, 최소화, 최대화, 닫기 버튼, 최상위 윈도우 여부, 시스템 메뉴 표시, 윈도우 외곽의 크기 조정 경게 표시

○ wx.Frame의 위에 위젯 올리기

- 이전까지는 '윈도우'에 대한 것을 다루었다면, 지금부터는 버튼이나 텍스트 박스 같은 위젯을 이 윈도우 안에 채워넣는 방법을 설명.

- wx.Frame 처럼 위젯을 담는 위젯을 '컨테니어 위젯' 이라고 함.

- 위젯을 컨테이너 위젯에 담을 때는 생성자의 'parent 매개변수'에 컨테이너 위젯의 식별자를 넣어주면 됨.



3. 컨테이너 위젯 wx.Panel과 위젯 배치 도우미 wx.Sizer

Q) GUI 프로그래밍을 하면서 가장 신경을 많이 쓰는 문제 중 하나가 바로 '위젯을 어떻게 배치할 것인가?"


- 컨테이너 위젯의 대표 선수 wx.Panel

  ○ 대개는 wx.Frame 위에 wx.Panel을 얹고 그 위에 다른 위젯들을 얹는 것이 보통임.


- 위젯 배치 도우미 : wx.Sizer와 그 파생 클래스의 이해

wx.Sizer는 추상 기반 클래스이기 떄문에 집적 사용할 수는 없고, 다음과 같은 wx.Sizer의 파생 클래스들을 사용해야 함.

● wx.BoxSizer : 수직이냐 수평이냐 그것이 문제로다~

이름 그대로 상자를 쌓아가듯 위젯을 배치하는 사이저.

생성자의 매개변수로 위젯 배치를 수직(wx.VERTICAL)으로 할 것인지 수평(wx.HORIZONTAL)으로 할 것인지 입력을 받음

예)

hBoxSizer = wx.BoxSizer(wx.HORIZONTAL) #수평

※사이저를 사용할 때, 잊지 말아야 할점은 '사이저는 단지 위젯의 배치만을 거들 뿐'이라는 사실임

= 위젯은 컨테이너 위젯 안에 생성되고, 사이저는 이렇게 생성된 위젯의 정보를 등록해뒀다가 컨테이너의 크기가 달라질 때,

   위젯을 재배치함.

사이저에 위젯을 등록할 때 사용하는 wx.BoxSizer 클래스의 Add() 메소드는 wx.Sizer로 부터 물려 받은 것임.

Add() 메소드 : 다음과 같은 5개의 매개변수를 입력 받음(self 제외)

Add(self, item, proportion=0, flag=0, border=0, userData=None)

item : 사이저의 배치 대상 위젯을 나타냄.

proportion : 사이저의 방향(수평,수직)으로 해당 위젯이 얼마나 늘어나게 할 것인지를 지정

border : 사이저의 경계 너비

userData : 프로그래머가 따로 보관하고자하는 데이터

flag : 사이저의 동작하는 방식을 제어


● wx.StaticBoxSizer : wx.BoxSizer에 제목 붙이기.

사이저에 제목을 붙이려면 생성자의 title 매개변수를 다음과 같이 지정해야함.

panel = wx.Panel(frame)

sizer = wx.StaticBoxSizer(wx.HORIZONTAL, panel, '제목') <- panel 매개변수는 제목 위젯이 놓일 컨테이너로 사용

● wx.GridSizer : 격자 안에 위젯 담기

wx.GridSizer는 배치를 수행할 컨테이너의 공간을 행과 열로 균등하게 나누고, 나눈 각 공간에 위젯을 배치하는 사이저.

네 개의 매개변수를 받음. 첫 두개의 매개변수는 행과 열의 개수, 나머지 두개의 매개변수는 수평 간격과 수직 간격.

● wx.FlexGridSizer : wx.GridSizer처럼 행,열로 나눈 구역 안에 위젯을 배치하는 기능을 함에 더불어 특정 열 또는 행을 컨테이너 크기의 변화에 따라

     늘어나거나 줄어들게 만들 수 있는 특징이 있음.

-> wx.Sizer의 파생 클래스들을 일컬어서 사이저(Sizer)라고 함.


4. 다양한 위젯 사용하기


- wx.MenuBar와 wx.Menu, wx.MenuItem

메뉴바, 메뉴, 그리고 메뉴 항목

모두 컨테이너 위젯을 필요로 하지 않음.



- wx.StaticText와 wx.TextCtrl



- wx.RadioButton



- wx.CheckBox



= wx.ListBox와 wx.ComboBox



- wx.TreeCtrl



- wx.Slider 와 wx.Gauge


- wx.Dialog

728x90

'스마트웹앱콘텐츠전문가 > 파이썬(플라스크, 데이터 처리)' 카테고리의 다른 글

표준 모듈  (0) 2018.11.28
[python3]리스트  (0) 2018.11.27
[네트워크 프로그래밍]  (0) 2018.01.24
[트위터 활용]  (0) 2018.01.24
[파일처리]  (0) 2018.01.23