출처 : 두근두근 파이썬, 파이썬 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() 등을 사용한다.
값을 입력하면 확대 배수 창이 꺼지고 숫자가 기록된다.
'전공과목 정리 > 프로그래밍언어 (Python, C++)' 카테고리의 다른 글
[파이썬프로그래밍🐍] 리스트, 튜플, 딕셔너리, 세트 (0) | 2022.01.29 |
---|---|
[파이썬프로그래밍🐍] 함수, 파일 (0) | 2022.01.29 |
[파이썬프로그래밍🐍] 조건문, 반복문 (0) | 2022.01.29 |
[파이썬프로그래밍🐍] 변수, 계산, 자료형 (0) | 2022.01.29 |