본문 바로가기

공부/python

(python) tkinter을 통한 GUI 프로그래밍1 - 버튼과 이벤트 처리, 배치 관리자, 이벤트 처리, tkinter의 위젯들, 단순 위젯과 컨테이너 위젯

tkinter

tkinter는 파이썬에서 그래픽 사용자 인터페이스(GUI: Graphical User Interface)를

개발할 때 필요한 모듈이다. tkinter을 이용하면 윈도우를 생성하고 버튼이나

레이블과 같은 위젯을 이용하여서 사용자와 상호작용하는 프로그램을 작성할 수

있다. tkinter의 유래는 아래와 같다.

  • tkinter는 예전부터 유닉스 계열에서 사용되던 Tcl/Tk 위에 객체 지향 계층을 입힌 것이다.
  • Tk는 John Ousterhout에 의하여 Tcl 스크립팅 언어를 위 한 GUI 확장으로 개발
  • tkinter : Tk interface의 약자 (파이썬에서 가장 많이 이용되는 GUI 모듈)

tkinter의 간단한 예시를 보자.

위에서부터 설명하자면

  • tkinter을 사용하려면 tkinter 모듈을 포함시켜야 하는데, *tkinter 모듈에서 모든 클래스와
    함수를 포함하겠다는 의미이다.
  • Tk 클래스 객체를 생성하면 화면에 윈도우(root)하나를 생성한다.
  • 윈도우로 레이블 위젯을 생성하고, 글자는 Hello, World!로 한다.
  • 글자를 표시할 정도로만 레이블 위젯 크기(압축 배치 관리자)를 축소한다.
    (pack이 호출되어야만 위젯이 화면에 나타난다.)
  • mainloop() 메소드는 마우스 버튼과 같은 이벤트를 처리하면서 사용자가 윈도우를 닫을 때까지
    반복한다. 이걸 이벤트 루프라고 한다.

버튼과 이벤트 처리

텍스트/이미지를 포함하는 사용자 상호작용을 위한 위젯이다.

 

배치 관리자

pack배치 관리자는 기본값으로 위젯을 추가된 순서에 따라 수직으로 쌓는다.

 

다른 예를 보자.

압축 배치 관리자를 이용하여 버튼을 수편으로 배치하였다.

 

또 다른 예를 보자.

pady는 상단과 하단에 픽셀을 추가하고,

padx는 왼쪽 및 오른쪽에 픽셀을 추가한다.

 

또또 다른 예를 보자.

버튼의 텍스트를 다른 문장으로 변경해보았다.

 

----------

 

배치관리자 : 컨테이너 안에서 위젯들의 위치와 크기를 결정

  • Grid : 격자 배치 관리자(grid geometry manager)
    테이블 형태의 배치, grid() 메소드 이용
  • Pack : 압축 배치 관리자(pack geometry manager) 
    위젯들을 부모 위젯 안에 압축 
    자식 위젯들을 사각형 블록으로 간주하여 프레임 안에 배치
    pack()메소드 사용
  • Place : 절대 배치 관리자(place geometry manager) 
    주어진 위치에 위젯을 배치, place() 메소드 사용

이벤트 처리

tkinter 프로그램은 이벤트에 기반을 두고 동작된다.

우리는 버튼에 이벤트를 처리하는 함수를 붙일 수 있고, 버튼에 이벤트를 처리하는 함수가

연결되어 있으면, 이벤트가 발생할 때, 그 함수가 호출된다.

이벤트가 발생하였을 때 호출되는 함수를 콜백함수(callback function) 또는 핸들러(handler)

라고 한다. 버튼에 콜백함수를 등록하려면 버튼의 생성자를 호출할 때, command 매개변수에

이벤트를 처리하는 함수의 이름을 지정하면 된다.

복잡하게 느껴지니 간단하게 정리하자.

  • 이벤트가 발생할 때 호출되는 함수: 콜백함수 또는 핸들러
  • 콜백함수 등록 방법: command 매개변수에 지정하면 됨

 

아래의 형식을 보자.

 

몇가지의 예제를 보자.

버튼을 클릭하면 텍스트가 바뀐다.

미리 정의해둔 callback()함수가 Button()의 생성자 호출에서 이벤트 처리함수로 등록된다.

 

레이블과 버튼을 혼용해서 사용했다.

 

 

tkinter의 위젯들

  • Button : 버튼
  • Canvas : 화면에 그릴 때 사용 
  • Checkbutton : 2가지 구별되는 값을 가지는 변수 표현 
  • Entry : 한줄 텍스트 입력받는 필드
  • Frame : 컨테이너 클래스 (다른 위젯을 포함) 
  • Label : 텍스트 표시 
  • Listbox : 선택사항 표시 
  • Menu : 메뉴 표시 
  • Menubutton : 메뉴 버튼 
  • Message : 텍스트 표시(자동적으로 텍스트 축소) 
  • Radiobutton : 여러 개의 값 중 하나의 값만을 가짐 
  • Scale : 슬라이더를 끌어서 수치값 입력 
  • Scrollbar : 스크롤 바 제공
  • Text : 여러가지 스타일/속성으로 텍스트 표시 
  • Toplevel : 최상위 윈도우 
  • LabelFrame : 경계선과 제목을 가지는 프레임 위젯
  • PanedWindow : 자식 위젯들을 크기조절이 가능한 패널로 관리하는 컨테이너 위젯
  • Spinbox : 특정한 범위에서 값을 선택하는 엔트리 위젯의 변형

단순 위젯과 컨테이너 위젯

파이썬에서 제공하는 위젯은 크게 단순 위젯과 컨테이너 위젯으로 나뉜다.

컨테이너 위젯은 다른 위젯을 내부에 넣을 수 있는 위젯이다.

  • 단순 위젯
    Button, Canvas, Checkbutton, Entry, Label, Message 등
  • 컨테이너 위젯
    다른 컴포넌트를 안에 포함할 수 있는 위젯
    Frame, Toplevel, Label, Frame, PanedWindow 등