티스토리 뷰
9.5 캔버스(Canvas)
- 모양을 나타내기 위해 캔버스(Canvas) 위젯을 이용할 수 있다.
- 우리는 아래의 메소드들을 이용해 모양을 그릴 수 있다.
ex) create_rectangle(사각형), create_oval(타원), create_arc(호), create_polygon(다각형), create_line(선분)
- 아래의 예제는 캔버스(Canvas) 위젯을 어떻게 사용하는지 보여주는 예이다.
*캔버스 예제(CanvasDemo.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
63
64
65
66
67
68
69
70
71 |
from tkinter import * #tkinter의 모든 정의를 임포트한다.
class CanvasDemo :
def __init__(self) :
window = Tk() #창을 생성한다.
window.title("Canvas Demo") #창 제목 설정
#윈도우 창에 캔버스 배치한다.
self.canvas = Canvas(window, width = 200, height = 100, bg = "white")
self.canvas.pack()
#프레임에 버튼을 배치한다.
frame = Frame(window)
frame.pack()
btRectangle = Button(frame, text = "Rectangle", command = self.displayRect)
btOval = Button(frame, text = "Oval", command = self.displayOval)
btArc = Button(frame, text = "Arc", command = self.displayArc)
btPolygon = Button(frame, text = "Polygon", command = self.displayPolygon)
btLine = Button(frame, text = "Line", command = self.displayLine)
btString = Button(frame, text = "String", command = self.displayString)
btClear = Button(frame, text = "Clear", command = self.clearCanvas)
btRectangle.grid(row = 1, column = 1)
btOval.grid(row = 1, column = 2)
btArc.grid(row = 1, column = 3)
btPolygon.grid(row = 1, column = 4)
btLine.grid(row = 1, column = 5)
btString.grid(row = 1, column = 6)
btClear.grid(row = 1, column = 7)
window.mainloop() #이벤트 루프를 생성한다.
#사각형 출력
def displayRect(self):
self.canvas.create_rectangle(10,10,190,90,tags = "rect")
#타원 출력
def displayOval(self):
self.canvas.create_oval(10,10,190,90, fill = "red", tags = "oval")
#호 출력
def displayArc(self):
self.canvas.create_arc(10,10,190,90,start = 0, extent = 90, width = 8, fill = "red", tag = "arc")
#다각형 출력
def displayPolygon(self):
self.canvas.create_polygon(10,10,190,90,30,50,tags = "polygon")
#선분 출력
def displayLine(self):
self.canvas.create_line(10,10,190,90,fill = "red", tags = "line")
self.canvas.create_line(10,90,190,10, width = 9, arrow = "last", activefill = "blue", tags = "line")
#문자열 출력
def displayString(self):
self.canvas.create_text(60, 40, text = "Hi, I am a string",
font = "Times 10 bold underline", tags = "string")
#그림 제거
def clearCanvas(self):
self.canvas.delete("rect", "oval", "arc", "polygon", "line", "string")
CanvasDemo() # GUI 생성
|
cs |
<실행 결과>
- Line 9-10, 너비 200픽셀, 높이 100픽셀, 배경색이 하얀색인 캔버스 위젯이 창에 배치되어 있다.
- Line 16-28, 7개의 버튼을 Rectangle, Oval, Arc, Polygon, Line String, Clear 란 텍스트 라벨과 함께 생성하였다.
- Line 30-36, 그리드 매니저(Grid Manager)를 이용해 버튼을 한 행에 차례로 배치하였다.
- 그림을 나타내기 위해선, 캔버스 위젯에게 어느 위치에다 그림을 그릴 것인지 알려주어야 한다.
- 각 위젯들은 왼쪽 상단 (0, 0)으로 설정되어 있는 자기 고유의 위치를 이미 보유하고 있다.
- Tkinter의 x축, y축 좌표계와 우리가 일반적으로 알고 있는 좌표계는 다르다는 것을 명심하자.
- Tkinter의 x좌표는 증가하면 우측방향을 향하고, y좌표는 증가하면 아래방향으로 향한다.
- Line 42-59 까지, 그림을 그리기 위한 메소드들을 사용하였다.
ex) create_rectangle(사각형), create_oval(타원), create_arc(호), create_polygon(다각형), or create_line(선분)
- create_text 메소드는 텍스트 문자열을 그리는데 사용되는 함수이다.
*creat_text 사용형식
create_text(x, y, text) #(x, y) 좌표에 텍스트를 그린다.
- 모든 드로잉 메소드에 사용된 tags 명령문은 그림들을 식별하는데 이용된다. 이 태그들은 delete 메소드에서 이용되었다.
- Line 50, 59의 width 명령문은 그림에 사용될 펜 사이즈를 픽셀단위로 지정하는데 사용된다. Line50, 59
- Line 59, arrow 명령문은 선분에 화살표를 그릴때 사용된다. first, end, last와 같은 값을 이용해 선분의 시작지점, 끝지점, 선분 양 끝지점에 화살표를 그릴 수 있다.
- Line 59, activefill 명령문은 그림에 마우스를 올렸을 때 색이 바뀌게 해주는 명령문이다.
참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 파이썬 GUI' 카테고리의 다른 글
[파이썬]대출 계산기 (0) | 2017.11.06 |
---|---|
[파이썬]기하 관리자(The Geometry Managers) (0) | 2017.11.01 |
[파이썬]위젯 클래스 (4) | 2017.09.26 |
[파이썬 GUI]이벤트 처리하기(Processing Events) (1) | 2017.09.14 |
[파이썬]Tkinter를 이용한 GUI 프로그래밍 (1) | 2017.09.10 |
- Total
- Today
- Yesterday
- 파이썬 for
- 파이썬 객체
- 자료구조
- 자바스크립트 그래프
- css
- 파이썬 while
- 파이썬 예제
- 파이썬 연산자
- 백준 11501
- 파이썬 리스트
- 백준 10451
- 자바 에센셜 실습문제
- 파이썬
- 파이썬 선택문
- 버츄어박스
- 백준
- 백준 1874
- 파이썬 함수
- 파이썬 클래스
- 명품 c++ 실습
- 파이썬 단계적 개선
- 파이썬 진수 변환
- 자바
- css 박스
- 파이썬 if문
- 파이썬 터틀
- 웹
- css 그리드
- 파이썬 문자열
- 자바스크립트 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |