안녕하세요. 우당탕탕 개발 일지입니다.
파이썬 에디터 IDLE 3.12.1을 사용합니다.
책과 수업 내용을 바탕으로 요약한 내용과 교재 뒤 연습문제입니다.
※ tk 부분은 이전 내용과는 결이 다른 내용입니다.
당황하지 말고 처음 터틀 그래픽을 배웠던 것처럼 접근하면 도움이 됩니다.
ch11~13에도 계속 활용되는 문제가 나오기 때문에 제대로 학습해두어야 합니다.
- Tk interface
- tk 위젯
- 배치 관리자
1.Tk interface
tkinter라고 부르는 것은 Tk interface의 약어입니다.
우리가 이전에 화면에 그림을 그릴 때는 turtle 모듈을 사용했습니다.
turtle모듈도 파이썬이 제공하는 다양한 라이브러리 중 하나이고
tkinter도 그중 하나입니다.
다만, 옛날부터 많이 사용한 유명한 GUI라이브러리라고 생각하면 됩니다.
GUI는 graphical user interface로 윈도우, 메뉴,버튼, 마우스 등을 사용하여
사용자와 정보를 교환 하는 방식이다.
2. tk 위젯
위젯(widget)은 GUI의 요소이며 정보를 표시하거나
사용자와 프로그램이 상호작용할 수 있는 방식을 제공하는 방법 같은 것들이다.
모든 위젯을 기억하고 쓰는 것은 불가능 함으로
자주 쓰는 위젯만 기억하고 나머지는 필요할 때 구글링 하는 것이 좋다.
단순 위젯 | 설명 |
Button | 버튼을 만들고 명령을 수행할 때 필요하다. |
Entry | 한 줄의 텍스트를 입력 받는 필드이다. 사용자로부터 입력을 받으려면 필요하다. |
Label | 화면에 텍스트나 이미지를 표시하려면 필요하다. |
컨테이너 컴포넌트 | 설명 |
Frame | 다른 위젯들을 그룹핑 하는데 사용된다. 창을 크게 n개로 구분한다고 생각하면 이해가 편하다. |
위젯을 사용해 위와 같은 화면을 구성할 수 있다
예제 2개 정도를 따라 하면서 위젯에 대해 익혀보자.
tkinter문제를 풀때는
1. 외향을 먼저 만들고
2. 함수를 만들어서 붙이기.
예제_하나의 버튼이 있는 윈도우 만들기
from tkinter import *
#Tk interface안에 있는 모든 함수를 포함시키라는 의미.
# *표시가 모든 것을 의미한다.
window=Tk()
#제일 먼저 최상위 윈도우를 생성 시킴.
#tkinter 모듈안에 TK 클래스가 하나의 윈도우를 나타낸다
#윈도우 안에 여러가지 위젯을 추가할 수 있다.
button=Button(window,text="클릭하세요")
#버튼 위젯을 생성한다.
#Button은 버튼을 나타내는 클래스이다.
#Button의 첫번째 매개변수로 객체window가 전달되고
#Button의 두번째 매개변수로 버튼 표시에 텍스트가 전달된다.
button.pack()
#pack()은 버튼을 쌓아서 윈도우에 표시.
window.mainloop()
#윈도우에서 발생하는 여러가지 이벤트를 처리하는 함수이다.
#마우스,키보드 이벤트
.
예제_엔트리와 레이블 위젯
from tkinter import *
window=Tk()
def process1(): #외형 만들고 마지막에 함수
temperature=float(e1.get()) #첫번째 빈칸에서 입력 받은 값을 불러옴
mytemp=(temperature-32)*5/9 #공식에 따라서 계산함
e2.insert(0, str(mytemp))
def process2(): #외형 만들고 마지막에 함수
temperature=float(e2.get()) #첫번째 빈칸에서 입력 받은 값을 불러옴
mytemp=temperature*9/5+32 #공식에 따라서 계산함
e1.insert(0, str(mytemp))
l1=label(window, text="화씨") #화씨라는 글씨 화면에 표시
l2=label(window, text="섭씨") #섭씨라는 글씨 화면에 표시
l1.pack()
l2.pack()
e1=Entry(window) #입력할 수 있는 빈칸
e2=Entry(window) #입력할 수 있는 빈칸
e1.pack()
e2.pack()
b1= Button(window,text="화씨-> 섭씨", command=process1)
#"화씨-> 섭씨" 라는 이름의 버튼 생성
#process1 함수를 호출해 버튼을 눌렀을 때 기능 추가
b2= Button(window,text="섭씨-> 화씨", command=process2)
#"섭씨-> 화씨"라는 이름의 버튼 생성
#process2 함수를 호출해 버튼을 눌렀을 때 기능 추가
b1.pack()
b2.pack()
window.mainloop()
3. 배치 관리자
- 압축(pack) 배치 관리자 : 수직이나 수평으로 쌓아서 배치.
- 격자(grid) 배치 관리자 : 격자모양으로 배치
- 절대(place) 배치 관리자 : 절대 좌표를 사용하여 배치
한 코드 내에서 배치 관리자를 여러 개 쓰면 error난다.
pack
- 상대적인 위치이기 때문에 위치를 바꾸도 싶을 때 제약이 많다.
- 위아래, 양옆 이동만 할 수 있다.
- 매개변수 side="left" 이런 식으로 사용한다. ex) l1.pack( side="left")
pady, padx
pady=10라고 하면은 y축으로 10픽셀만큼 민 것이다.
padx=5라고 하면은 x축으로 5픽셀만큼 민 것이다.
grid
- pack 보다는 다양한 위치에 배치할 수 있다.
- column은 가로열, row은 세로열이다.
- ex) e1.grid(column=0, row=0)
columnspan, rowspan
columnspan=5라고 하면 가로 5개의 셀을 합치라는 의미다.
rowspan=3라고 하면 세로 3개의 셀을 합치라는 의미다.
Place
- 좌측 위쪽 모서리가 (0,0)인 좌표평면을 떠올리면 된다.
- 오른쪽으로 가면 x축 좌표 증가이고 밑으로 가면 y축 좌표 증가이다.
- place(x, y) 형식으로 사용.
연습문제 ch10-2
from tkinter import *
def process():
value=float(e1.get())
value1=value*1.609
e2.insert(0, str(value1))
window=Tk()
l1=Label(window, text="마일:", font=('Arial',15),fg='black')
l1.grid(row=0, column=0)
e1=Entry(window, font=('Arial',15),fg='black', bg='white')
e1.grid(row=0, column=1)
l2=Label(window, text="킬로미터:", font=('Arial',15),fg='black')
l2.grid(row=1, column=0)
e2=Entry(window, font=('Arial',15),fg='black', bg='white')
e2.grid(row=1, column=1)
b=Button(window, text="변환", command=process)
b.grid(row=2,column=0)
window.mainloop()
연습문제 ch10-4
from tkinter import *
import random
com_guess=random.randint(1,100)
def guess():
user_guess=int(e1.get())
if com_guess == user_guess:
l2['text']="correct!!!"
elif com_guess > user_guess:
l2['text']="high!"
elif com_guess < user_guess:
l2['text']="low!"
def reset():
e1.delete(0,10)
window=Tk()
l1=Label(window,text="Guessing Game",font=('Arial',20))
l1.place(x=20,y=0)
e1=Entry(window,font=('Arial',15))
e1.place(x=20,y=50)
b1=Button(window, text="guess", command=guess)
b1.place(x=20,y=80)
b2=Button(window, text="reset", command=reset)
b2.place(x=70,y=80)
l2=Label(window)
l2.place(x=20,y=120)
window.mainloop()
'[프로그래밍 언어] > python' 카테고리의 다른 글
두근두근 파이썬(개정판)_ch 13 객체와 클래스 (1) | 2024.01.28 |
---|---|
두근두근 파이썬(개정판)_ch11 파일 (1) | 2024.01.28 |
두근두근 파이썬(개정판)_ch9 리스트와 딕셔너리 연습문제 1~8번 (2) | 2024.01.25 |
두근두근 파이썬(개정판)_ch9 리스트와 딕셔너리 (2) | 2024.01.25 |
두근두근 파이썬(개정판)_ch7 함수 연습문제 1~10번 (1) | 2024.01.25 |