전공과목 정리/프로그래밍언어 (Python, C++)

[파이썬프로그래밍🐍] tkinter

최연재 2022. 1. 29. 23:05

출처 : 두근두근 파이썬, 파이썬 for Beginner

-------

개발 블로그를 티스토리로 옮기며 기존의 네이버 블로그에 작성한 내용을 그대로 옮겼습니다.

https://blog.naver.com/0yeonjae2/222594865515

-------

 

1. tkinter

- 파이썬에서 그래픽 사용자 인터페이스(Grapical User Interface)를 개발할 때 필요한 모듈

- TK Interface의 약어이다. TK는 Tcl/TK라는 전통적인 GUI 인터페이스로, 윈도, 리눅스, 맥 등에서 모두 동일한 코드로 사용할 수 있다.

- tkinter는 예전부터 유닉스 계열에서 사용되던 Tcl/Tk 위에 객체 지향 계층을 입힌 것이다.

 

1) tkinter의 위젯

 
위젯
설명
Button
간단한 버튼으로 명령을 수행할 때 사용된다.
Canvas
화면에 무언가를 그릴 때 사용한다.
Checkbutton
2가지의 구별되는 값을 가지는 변수를 표현한다.
Entry
한 줄의 텍스트를 입력받는 필드이다.
Frame
컨테이너 클래스이다. 프레임은 경계선과 배경을 가지고 있다. 다른 위젯들을 그룹핑하는 데 사용된다.
Label
텍스트나 이미지를 표시한다.
Listbox
선택 사항을 표시한다.
Menu
메뉴를 표시한다. 풀다운 메뉴나 팝업 메뉴가 가능하다.
Menubutton
메뉴 버튼이다. 풀다운 메뉴가 가능하다.
Message
텍스트를 표시한다. 레이블 위젯과 비슷하다. 하지만 자동적으로 주어진 크기로 텍스트를 축소할 수 있다.
Radiobutton
여러 값을 가질 수 있는 변수를 표시한다.
Scale
슬라이더를 끌어서 수치를 입력하는 데 사용된다.
Scrollbar
캔버스, 엔트리, 리스트박스, 텍스트 위젯을 위한 스크롤 바를 제공한다.
Text
형식을 가지는 텍스트를 표시한다. 여러 가지 스타일과 속성으로 텍스트를 표시할 수 있다.
Topleve
최상위 윈도우로 표시되는 독립적인 컨테이너 위젯이다.
LabelFrame
경계선과 제목을 가지는 프레임 위젯의 변형이다.
PanedWindow
자식 위젯들을 크기 조절이 가능한 패널로 관리하는 컨테이너 위젯이다.
Spinox
특정한 범위에서 값을 선택하는 엔트리 위젯의 변형

 

- 단순 위젯 : Button, Canvas, Checkbutton, Entry, Label, Message 등이 속한다.

- 컨테이너 컴포넌트 : 다른 컴포넌트를 안에 포함할 수 있는 컴포넌트.

ex) Frame, Toplevel, LabelFrame, PanedWindow

 

2) 기본 윈도창의 구성

- 위젯(Widget) : 윈도창에 나올 수 있는 문자, 버튼, 체크박스, 라디오버튼 등을 의미한다.

 

1행 : tkinter는 파이썬에서 GUI 관련 모듈을 제공해 주는 표준 윈도 라이브러리

2행 : Tk()는 기본이 되는 윈도를 반환, 이를 루트 윈도 또는 베이스 윈도라고 한다. 베이스 윈도를 window 변수에 넣는다.

3행 : window.mainloop() 함수 실행

 

3) 버튼이 있는 윈도우 생성하기

4) 윈도우 창 조절하기

크기 변경이 되지 않는다.

 

5) 레이블

- 레이블 : 문자를 표현할 수 있는 위젯

anchor는 방향이다. S,E,N,W,SE,SW,NE,NW,CENTER가 가능하다.

 

- 이미지 넣기

PhotoImage() : GIF 파일만 지원한다.

6) 엔트리와 레이블 위젯

7) 버튼

: 마우스로 클릭하면 눌리는 효과와 함께 지정한 작업 실행

버튼을 누르면 파이썬 IDLE이 종료된다.

ex) 이미지 버튼 클릭 시 메시지 창 생성하기

고양이 사진을 누르면 메시지 창이 나타난다.

8) 체크 버튼

- 체크 버튼(Checkbutton) : 켜고 끄는 데 사용하는 위젯

 

9) 라디오 버튼

라디오 버튼(Radiobutton) : 여러 개 중에서 하나를 선택하는 데 사용하는 위젯

 

10) 배치 관리자

- 압축(pack) 배치 관리자

- 격자(grid) 배치 관리자

- 절대(place) 배치 관리자

 

(1) 압축 배치 관리자

① 수평 정렬

: pack() 함수의 옵션 중 side = LEFT, side = RIGHT

비어 있는 리스트를 3개 준비하고, 3회 반복하면서 버튼을 생성한다.

 

② 수직 정렬

btn.pack(side=TOP, side=BOTTOM)

TOP는 BOTTOM는

1 3

2 2

3 1

의 형태로 결과가 나온다.

 

③ 폭 조절

윈도창 폭에 크기를 맞추는 방법 : fill = X

btn.pack(side=TOP, fill=X)

 

④ 위젯 사이 여백 조절

- pack() 함수의 옵션 중에서 위젯 사이에 여백을 주는 방법 : padx=픽셀값 또는 pady=픽셀값

 

- pack() 함수의 옵션 중에서 위젯 내부에 여백을 주는 방법 : ipadx = 픽셀값 또는 ipady = 픽셀값

 

(2) 격자 배치 관리자

위젯.grid(row=?, column=?)

(3) 절대 위치 배치 관리자

- 위젯을 고정 위치에 배치하려면 place()함수를 사용한다.

위젯.place(x=?, y=?)

 

 

11) 마우스 이벤트 처리

 
마우스 작동
마우스 버튼
이벤트 코드
클릭할 때
모든 버튼 공통
<Button>
왼쪽 버튼
<Button-1>
가운데 버튼
<Button-2>
오른쪽 버튼
<Button-3>
떼었을 때
모든 버튼 공통
<ButtonRelease>
왼쪽 버튼
<ButtonRelease-1>
가운데 버튼
<ButtonRelease-2>
오른쪽 버튼
<ButtonRelease-3>
더블클릭할 때
모든 버튼 공통
<Double-Button>
왼쪽 버튼
<Double-Button-1>
가운데 버튼
<Double-Button-2>
오른쪽 버튼
<Double-Button-3>
드래그할 때
왼쪽 버튼
<B1-Motion>
가운데 버튼
<B2-Motion>
오른쪽 버튼
<B3-Motion>
마우스 커서가 위젯 위로 올라왔을 때
<Enter>
마우스 커서가 위젯에서 떠났을 때
<Leave>

 

def 이벤트처리함수(event):

# 이 부분에 마우스 이벤트가 발생할 때 작동할 내용 작성

 

위젯.bind("마우스이벤트", 이벤트처리함수)

ex) window.bind("<Button-1>", 함수이름)

 

12) 키보드 이벤트 기본 처리

- 키보드 이벤트는 위젯에서 키보드가 눌리면 발생한다.

키보드 작동
이벤트 코드
모든 키를 누를 때
<Key>
특수 키를 누를 때
<Return>, <Backspace>, <Tab>, <Shift_L>, <Control_L>, <Alt_L>, <Pause>, <Caps_Lock>, <Escape>, <End>, <Home>, <Left>, <Right>, <Up>, <Down>, <Num_Lock>, <Delete>, <F1> ~ <F12> 등
일반 키를 누를 때
a ~ z, A ~ Z, 0~9, <space>, <less>
화살표 키와 조합
<Shift-Up>, <Shift-Down>, <Shift-Left>, <Shift-Right> 등

 

- Enter를 처리하려면 <Key> 대신 <Return>을 사용한다.

- 대소문자를 구분해서 처리 가능

- 일반 키를 누를 때 주의할 점은 SpaceBar는 <Space>로 <는 <less>로 사용한다.

 

13) 메뉴와 대화상자

-메뉴의 생성

 

# Menu(부모 윈도)로 메뉴자체 변수 생성

메뉴자체 = Menu(부모윈도)

 

# 생성한 메뉴자체를 윈도창의 메뉴로 지정

부모윈도.config(menu=메뉴자체)

 

'''

상위메뉴인 상위메뉴텍스트 생성, 메뉴 자체에 부착하는 상위메뉴텍스트 메뉴는 선택하고 끝나는 것이 아니라, 그 아래에 다른 다른 메뉴가 확장돼야 하므로 add_cascade() 함수 사용

'''

상위메뉴 = Menu(메뉴자체)

메뉴자체.add_cascade(label="상위메뉴텍스트", menu=상위메뉴)

 

# 상위메뉴 하위에 하위메뉴1과 2준비, 선택 시 특정한 작동을 해야 하므로 add_command() 함수를 사용한다.

상위메뉴.add_command(label="하위메뉴1", command=함수1)

상위메뉴.add_command(label="하위메뉴2", command=함수2)

 

# 메뉴 사이 구분선

상위메뉴.add_separator()

 

- 대화 상자의 생성과 사용

: tkinter.simpledialog 모듈을 임포트한 후 askinteger() 및 askstring() 등을 사용한다.

값을 입력하면 확대 배수 창이 꺼지고 숫자가 기록된다.