PyQt 예제 2.1.2

지난 번에 언급 했듯이 2 버전에서는 대화 상자에 대해서 알아볼 것이다.

일단, 글로 자세하게 알아 볼 것이다. (지난 번에 올린 글을 다시 올리는 것이다...)

참고 문헌: Rapid GUI Programming with Python and Qt

대화 상자는 대부분의 GUI 프로그램이 가지고 있다. 대화 상자를 통해서 사용자와 상호 작용이 가능해지게 된다.

대화 상자는 지능(Intelligence)를 기준으로 3가지로 분류 해볼 수 있는데, dumb 형, standard 형, smart 형으로 나눌 수 있다.

이러한 분류는 각각이 어떻게 발생하고 인스턴스화 되는 지에 따라서 분류가 된다.


위의 분류 외에도 다른 분류 방법이 있는데, 모달(modality)에 따라서 분류를 할 수가 있다. 어플리케이션 모달(application modal)의 대화 상자는 한번 불려지며, 사용자와 상호 작용하는 어플리케이션의 일부분이다.

사용자가 대화 상자를 닫을 때까지 어플리케이션의 남은 부분을 사용할 수가 없다.

윈도우 모달(window modal)의 대화 상자는 부모의 창, 부모의 부모의 창, 그 이상의 상위 부모 창 및 부모 창의 형제 창과 상호 작용을 막는 것을 제외하고는 어플리케이션 모달의 대화 상자와 비슷하다.

따라서 한 개의 상위 윈도우에 대해서는 두 모달 사이에는 실질적인 차이가 없다. 그리고 특정 언급 없이는 윈도우 모달을 말하는 것으로 하겠다.

마지막으로, 모달에 따라 분류에 대한 반대로 비모달의 대화 상자가 있다. 비모달의 대화 상자는 사용자가 대화 상자와 어플리케이션의 남은 부분과 상호 작용을 할 수 있을 때 나타나게 된다.

(어플리케이션 모달의 예로는 파일 저장 대화 상자를 들 수가 있다. 비모달 대화 상자의 예로는 툴바나 도구 상자(문서 프로그램에서 표 도구 상자, 그리기 도구 상자라고 따로 창이 나오는 부분)을 들 수가 있다. 윈도우 모달 방식은 Mac OS X 에서 나온 방식인데, 투명한 시트가 부모 창의 제목 표시줄에 붙어서 나온다고 한다.
윈도우 모달의 예는 찾지 못했는데, 나중에 코딩을 통해서 어플리케이션 모달과 차이점을 비교해봐야 할 것 같다. 그리고 모달 방식과 비모달 방식은 실제로 소프트웨어 디자인에서 사용이 되고 있고, 비모달 방식이 좋은 방식에 속한다. 자세한 사항은 http://en.wikipedia.org/wiki/Dialog_box 참조.)


마지막으로 대화 상자를 만들 때 중요한 관점은 확인(validation)을 어떻게 처리해야 하는 것이다. 간단하게는 위젯의 속성을 조절해서 확인을 처리할 수 있다. 이것을 위젯 수준(widget-level)의 확인이라고 한다.

그러나 위젯 자체가 독립적이기 않을 경우 즉, 서로가 상호 작용을 한다면 서로를 고려하면서 확인을 처리해줘야 할 것이다. 이것을 폼 수준(form-level)의 확인 이라고 한다.

이러한 확인을 처리할 때 두 가지 정도로 넓게 고려할 수 있는데, 하나는 데이터가 넘겨 진 후에 처리하는 방법(post-mortem)과 데이터가 넘겨지기 전에 처리하는 방법(preventative)이 있다.

(예를 들어, 범위가 1~100 까지만 받을 수 있다고 했을 때 사용자가 범위를 넘긴 값을 입력 하려고 한다면 두 가지 방법으로 처리를 할 수가 있다. 입력을 한 후 값을 받고 나서 범위가 넘었다는 것을 알려주거나, 입력 시점부터 범위가 넘었다는 것을 알려주는 방법이 있다.)


이렇게 대화 상자를 만들 때는 고려할 점이 많다. 실제로는 특정 조합을 선택해서 대화 상자를 만들게 되는데, dumb 모달 대화 상자, standard 모달 대화 상자, smart 비모달 대화 상자를 사용하게 된다.

그리고 확인 처리에 대해서는 상황에 맞게 옳은 전략을 사용하면 된다.

그리고 추가로 Dumb 대화 상자에 대해서도 자세히 알아보고, 다음 글에서 예제 프로그램을 살펴 보겠다.

참고 문헌: Rapid GUI Programming with Python and Qt

여기서 dumb 란, 대화 상자를 호출한 창이 대화 상자의 초기값을 설정하고, 마지막 값도 호출한 창이 위젯으로부터 직접 얻어가는 방법을 말한다. 즉, dumb 대화 상자는 위젯이 표현하고 수정하고 있는 데이터가 무엇인지를 전혀 알지 못한다.
(영어 뜻 그대로 "벙어리의", "우둔한"의 의미와 비슷하다.)

이러한 특성 때문에 dumb 대화 상자에는 기본적이 확인(validation)만 가능 하고 위젯 사이의 상호 확인은 일반적이지 않다.

즉, 보통 dumb 대화 상자에서는 폼 수준의 확인을 하지 않는다. 그리고 dumb 대화 상자는 보통 수락 버튼의 OK와 거절 버튼의 Cancel 을 갖는다.


dumb 대화 상자의 주요 장점은 API 와 함께 대화 상자를 제공하는 어떠한 코드도 작성할 필요가 없고, 추가적인 논리 코드도 필요가 없다. 이러한 이점들은 모든 위젯이 공개적으로 접근할 수 있는 결과이다.

이에 반하여 dumb 대화 상자의 단점은 재활용이 힘들다는 것이다. 위젯을 직접 접근해야 하는 만큼 대화 상자의 인터페이스가 특정한 경우에 묶여 있기 때문이다.

따라서 복잡한 확인(validation) 을 시행할 수도 없고, 한 장소 이상에서 필요한 경우 standard 대화 상자나 smart 대화 상자에 비해 불편하다.

댓글 없음:

댓글 쓰기