파이썬(Python)

[ Tkinter ] 파이썬 Tkinter Canvas로 프로그래스바 만들기(진행상태바 만들기 두번째)

카루루1007 2024. 1. 9. 12:45
728x90
반응형
SMALL

[ 들어가며 ] 

 

지난 블로그에 파이썬 tkinter 모듈을 사용해

진행상태바를 만들어 보았습니다.

※ 파이썬 진행상태바 만들기

 

오늘은 canvas를 활용하여

다른 형태의 진행상태바를 만들어 보겠습니다.

 

지난 시간에 만들어본 진행상태바는

진행률이 진행상태바와 겹치도록 표시하기가

쉽지 않기때문에

다른 형태의 진행상태바를 만드는 방법을

작성하려고 합니다.

 

다음은 프로그램이 실행된 화면입니다.

반응형

[ 코드의 전체적인 흐름 ] 

 

① Tkinter 모듈을 import합니다.

② Tk 객체를 생성하여 윈도우를 생성합니다.

③ Canvas 객체를 생성하여 그래픽을 표시할 영역을 생성합니다.

④ 프로그래스바의 배경을 생성합니다.

⑤ 그림자를 생성합니다.

⑥ 프로그래스바를 생성합니다.

⑦ 프로그래스바에 표시할 텍스트를 생성합니다.

⑧ 프로그래스바의 진행률을 업데이트합니다.

⑨ 윈도우가 종료되지 않도록 합니다.

 

[ Tkinter 모듈 import ]

 

먼저 Tkinter 모듈을 import해야 합니다.

 

import tkinter as tk

 

[ Tk 객체 생성 ]

 

Tk 객체는 Tkinter의 기본 윈도우 객체입니다.

Tk 객체를 생성하면 윈도우가 생성됩니다.

root = tk.Tk()

 

[ Canvas 객체 생성 ]

 

Canvas 객체는 그래픽을 표시하는 윈도우 객체입니다.

Canvas 객체는 프로그래스바를 생성하는 데 사용됩니다.

canvas = tk.Canvas(root, width=400, height=60, bg='#F9F6EF')
canvas.pack()

 

[ 프로그래스바 배경 생성 ]

 

프로그래스바는 배경과 프로그래스바 두 부분으로 구성됩니다.

먼저 프로그래스바의 배경을 생성합니다.

progressbar_bg = canvas.create_rectangle(50, 20, 350, 40, fill='#FFFFFF')

 

create_rectangle() 함수를 사용하여

직사각형을 생성합니다.

 

x좌표: 50

y좌표: 20

너비: 350

높이: 40

색상: #FFFFFF (흰색)

 

첫 번째, 두번째 인자는 직사각형의 좌표,

세 번째 인자는 직사각형의 너비,

 번째 인자는 직사각형의 높이입니다.

다섯 번째 인자는 직사각형의 색상입니다.

 

[ 그림자 생성 ]

 

프로그래스바를 약간 입체적으로 보이게 하기 위해

그림자를 생성합니다.

shadow = canvas.create_rectangle(51, 21, 51, 41, fill='#D1D1D1')
728x90

create_rectangle() 함수를 사용하여

프로그래스바 배경과 같은 위치에 그림자를 생성합니다.

그림자의 색상은 프로그래스바 배경의 색상보다 어두운 색으로 설정합니다.

 

x좌표: 51

y좌표: 21

너비: 51

높이: 41

색상: #D1D1D1 (밝은 회색)

 

[ 프로그래스바 생성 ]

 

프로그래스바를 생성합니다.

progressbar = canvas.create_rectangle(50, 20, 50, 40, fill='#007AFF')

 

create_rectangle() 함수를 사용하여

프로그래스바를 생성합니다.

프로그래스바의 너비는 50픽셀로 설정합니다.

 

x좌표: 50

y좌표: 20

너비: 50

높이: 40

색상: #007AFF (파란색)

 

 

[ 프로그래스바에 표시할 텍스트 생성 ]

 

프로그래스바에 진행률을 표시할 텍스트를 생성합니다.

text = canvas.create_text(200, 30, text="0%", fill='black')

 

create_text() 함수를 사용하여 텍스트를 생성합니다.

 

텍스트 내용: 0%

텍스트 좌표: (200, 30)

텍스트 색상: #000000 (검은색)

 

첫 번째 두 번째 인자는 텍스트의 좌표,

세 번째 인자는 텍스트의 내용,

네 번째 인자는 텍스트의 색상입니다.

 

[ 프로그래스바 업데이트 ]

 

프로그래스바의 진행률을 업데이트합니다.

for i in range(1, 301):
    canvas.coords(progressbar, 50, 20, 50 + i, 40)
    canvas.coords(shadow, 51, 21, 51 + i, 41)
	canvas.itemconfig(text, text=f"{int(i/3)}%")
    root.update()
    root.after(100)

 

range() 함수를 사용하여

1부터 300까지의 숫자를 반복합니다.

반복마다 프로그래스바의 너비와 그림자의 너비를 늘립니다.

 

또한, 텍스트의 내용을 진행률로 설정합니다.

update() 함수를 사용하여 윈도우를 업데이트합니다.

after() 함수를 사용하여 100ms 대기합니다.

 

[ mainloop() 함수 ]

 

mainloop() 함수를 사용하여 윈도우가 종료되지 않도록 합니다.

root.mainloop()

 

[ 전체 코드 ]

 

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root, width=400, height=60, bg='#F9F6EF')
canvas.pack()

progressbar_bg = canvas.create_rectangle(50, 20, 350, 40, fill='#FFFFFF')

shadow = canvas.create_rectangle(51, 21, 51, 41, fill='#D1D1D1')

progressbar = canvas.create_rectangle(50, 20, 50, 40, fill='#007AFF')

text = canvas.create_text(200, 30, text="0%", fill='black')

for i in range(1, 301):
    canvas.coords(progressbar, 50, 20, 50 + i, 40)
    canvas.coords(shadow, 51, 21, 51 + i, 41)
    canvas.itemconfig(text, text=f"{int(i/3)}%")
    root.update()
    root.after(100)

root.mainloop()

 

728x90
반응형
LIST