티스토리 뷰
9.4 위젯 클래스(The Widget Classes)
- Tkinter의 GUI 클래스는 버튼, 라벨, 확인 버튼, 캔버스 등의 공통 GUI 위젯들이 정의되어 있다.
- 아래의 표는 Tkinter가 제공하는 핵심 위젯 클래스이다.
*Tkinter 위젯 클래스
Widget Class |
Description |
Button |
명령을 실행하는 간단한 버튼이다. |
Canvas |
그래프나 도면, 그래픽 에디터 생성, 커스텀 위젯 구현 등에 이용될 캔버스, 일종의 그림판이다.? (다음 챕터에서 따로 다룬다.) |
Checkbutton |
값을 토글(toggle)하는 체크박스이다. |
Entry |
텍스트(Text)가 들어갈 필드이다. 이를 텍스트 필드(text field), 또는 텍스트 박스(text box)라고 부르기도 한다. |
Frame |
다른 위젯들을 가지는(containing) 컨테이너 위젯(container widget)이다. |
Label |
텍스트나 이미지를 출력하는 라벨이다. |
Menu |
펼침 목록(pull-down menu)와 팝업 메뉴(pop-up menu)를 구현하는 메뉴 판이다. |
Menubutton |
펼침 목록(pull-down menu)에 쓰일 메뉴 버튼이다. |
Message |
텍스트를 출력한다. 라벨(Label) 위젯과 비슷하지만 차이점은 텍스트의 크기를 비율에 맞게 자동으로 맞춰준다(wraping). |
Radiobutton |
동그란 버튼(radio button)을 생성한다. 값을 변수에 할당하고 같은 변수를 가진 다른 동그란 버튼들의 값을 |
Text |
서식화한 텍스트(formatted text)를 출력한다. |
- 위의 클래스 안에는 위젯을 만들기 위한 많은 옵션들이 존재한다.
- 제일 처음 필요한 요소로는 부모 컨테이너(parents container)이다.
- 위젯을 만들 때 전면색(foreground color), 배경색(background color), 폰트, 그리고 커서 스타일도 마음대로 설정 할 수 있다.
- 색을 지정하기 위해서, 색깔 이름(ex. red, yellow, blue, white, black, purple)을 사용하거나 아니면 빨강(red), 초록(green), 파랑(blue)(이하 RGB 컬러)와 같은 색은 ##RRGGBB 문자열을 이용해 표현할 수 있다.
- 그리고 폰트 이름과 사이즈, 스타일을 이용해 문자열의 폰트를 지정할 수 있다.
- 아래가 예가 있다.
*폰트 지정 형식
Times 10 bold
Helvetica 10 bold italic
CourierNew 20 bold italic
Courier 20 bold italic overstrike underline
- 기본적으로(by default), 라벨(label)과 버튼(button) 안에 있는 텍스트는 가운데에 정렬된다. 이 정렬은 justify 옵션을 이용해 변경이 가능하다(ex. 콘스턴트 LEFT, CENTER, RIGHT)
- cursor 옵션을 이용해 마우스 커서 스타일도 지정할 수 있다.(ex. arrow(기본형), circle, cross, plus)
- 그 외에도 위젯을 생성 할 때, 다양한 특성(properties)들을 직접 지정할 수 있다. (ex. fg, bg, font, cursor, text, command)
- 아래와 같은 문법을 이용해 위젯의 특성을 바꿀 수 있다.
*위젯 특성 형식
widgetName["propertyName"] = newPropertyValue
- 예를 들어, 아래의 코드는 버튼(button)을 만들어 이 버튼의 텍스트의 특성을 바꾸는 코드이다.
- 숨기고, 배경색을 빨갛게하고, 전경색을 #AB84F9. #AB84F 색(from RRGGBB)으로 지정하는 코드이다.
*버튼 특성 예제
btShowOrHide = Button(window, text = "Show", bg = "white")
btShowOrHide["text"] = "Hide"
btShowOrHide["bg"] = "red"
btShowOrHide["fg"] = "#AB84F9" # Change fg color to #AB84F9
btShowOrHide["cursor"] = "plus" # Change mouse cursor to plus
btShowOrHide["justify"] = LEFT # Set justify to LEFT
- 아래의 예제가 위에서 소개한 클래스들의 예제코드이다.
*widget 예제(WidgetsDemo.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 |
from tkinter import * # tkinter의 모든 정의를 임포트한다.
class WidgetsDemo:
def __init__(self):
window = Tk() # 창을 생성한다.
window.title("위젯 데모") # 제목을 설정한다.
# 체크 버튼과 라디오 버튼을 frame1에 추가한다.
frame1 = Frame(window) # 프레임을 생성하고 창에 추가한다.
frame1.pack()
self.v1 = IntVar()
cbtBold = Checkbutton(frame1, text = "굵게",
variable = self.v1, command = self.processCheckbutton)
self.v2 = IntVar()
rbRed = Radiobutton(frame1, text = "빨간색", bg = "red",
variable = self.v2, value = 1,
command = self.processRadiobutton)
rbYellow = Radiobutton(frame1, text = "노란색",
bg = "yellow", variable = self.v2, value = 2,
command = self.processRadiobutton)
cbtBold.grid(row = 1, column = 1)
rbRed.grid(row = 1, column = 2)
rbYellow.grid(row = 1, column = 3)
# 레이블, 엔트리, 버튼, 메시지를 frame2에 추가한다.
frame2 = Frame(window) # 프레임을 생성하고 창에 추가한다.
frame2.pack()
label = Label(frame2, text = "이름을 입력하세요: ")
self.name = StringVar()
entryName = Entry(frame2, textvariable = self.name)
btGetName = Button(frame2, text = "이름 가져오기",
command = self.processButton)
message = Message(frame2, text = "위젯 데모입니다.")
label.grid(row = 1, column = 1)
entryName.grid(row = 1, column = 2)
btGetName.grid(row = 1, column = 3)
message.grid(row = 1, column = 4)
# 텍스트를 추가한다.
text = Text(window) # 텍스트를 생성하고 창에 추가한다.
text.pack()
text.insert(END,
"팁\nTkinter를 학습하는 최고의 방법은 잘 짜여진 ")
text.insert(END,
"예제를 세세히 읽고 애플리케이션을 생성하는데 ")
text.insert(END, "직접 사용해 보는 것이다.")
window.mainloop() # 이벤트 루프를 생성한다.
def processCheckbutton(self):
print("체크 버튼이 "
+ ("선택되었습니다. " if self.v1.get() == 1 else "해제되었습니다."))
def processRadiobutton(self):
print(("빨간색" if self.v2.get() == 1 else "노란색")
+ " 이 선택되었습니다." )
def processButton(self):
print("당신의 이름은 " + self.name.get() + "입니다.")
WidgetsDemo() # GUI를 생성한다.
|
cs |
예제 코드 추가 설명 :
* IntVar, DoubleVar, StringVar
- tkinter 모듈 안에는 IntVar, DoubleVar, StringVar 클래스가 정의되어 있다.
- IntVar은 정수, DoubleVar은 소수, StringVar은 문자열을 나타내는 클래스이다.
- 이 클래스들은 위젯에 쓰이는 값(value)들을 객체로 만들 때 이용한다.
- 즉 위젯에 쓰이는 값(value)은 IntVar, StringVar, DoubleVar의 객체(object)이어야만 한다.
- Line 11의 체크버튼(check button)을 예로 들어 설명하자면
- 이 버튼은 변수 v1을 이용하는 체크버튼이다.
- v1은 IntVar의 인스턴스이며, 체크버튼에 쓰일 값이 저장된 객체를 가르킨다.
- v1은 체크버튼을 눌렸다면 정수 '1'로 설정되고, 체크버튼을 누르지 않으면 정수 '0'으로 된다.
*grid 기하 관리자(geometry manager)
- Line 21-23 의 .gird(row, col)은 위젯의 배치를 담당하는 관리자이다.
- Line 21-23 의 위젯들은 같은 줄의 1, 2, 3 열에 제 각각 배치된다.
- 기하관리자는 이후에 다시 다룬다.
*insert 메소드
- insert 메소드를 이용하여 텍스트를 이 위젯안에 삽입 할 수 있다.
- 'END' 옵션은 문자열 맨 뒤에 특정 텍스트들 삽입한다는 의미를 가지고 있다.
참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 파이썬 GUI' 카테고리의 다른 글
[파이썬]대출 계산기 (0) | 2017.11.06 |
---|---|
[파이썬]기하 관리자(The Geometry Managers) (0) | 2017.11.01 |
[파이썬]캔버스 (0) | 2017.10.30 |
[파이썬 GUI]이벤트 처리하기(Processing Events) (1) | 2017.09.14 |
[파이썬]Tkinter를 이용한 GUI 프로그래밍 (1) | 2017.09.10 |
- Total
- Today
- Yesterday
- 파이썬 문자열
- 백준
- 백준 1874
- 자바스크립트 그래프
- 버츄어박스
- css
- 명품 c++ 실습
- 자료구조
- 파이썬 리스트
- 파이썬 선택문
- 웹
- 파이썬 while
- 자바스크립트 자료구조
- 파이썬
- 파이썬 if문
- 파이썬 터틀
- 파이썬 for
- css 그리드
- 자바 에센셜 실습문제
- 파이썬 연산자
- 백준 11501
- 파이썬 클래스
- 자바
- 파이썬 예제
- 파이썬 진수 변환
- 파이썬 단계적 개선
- css 박스
- 파이썬 객체
- 백준 10451
- 파이썬 함수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |