본문 바로가기
프로그래밍언어/Python

[Python] : 위젯의 배치와 크기 조절

by 오주현 2021. 10. 27.
반응형
위젯의 배치와 크기 조절

- 윈도우 창에 위젯을 여러 개 표시할 때 그 배치를 잘 고려해 화면을 효과적으로 표현할 수 있습니다.

 

- pack() 이나 place() 함수를 사용해 위젯을 화면에 출력합니다.

 

- 기존에 출력된 위젯의 모양을 변경할 때는 configure() 함수를 사용합니다.

 


 

from tkinter import *

window = Tk()

button1 = Button(window, text = "버튼1")
button2 = Button(window, text = "버튼2")
button3 = Button(window, text = "버튼3")

button1.pack(side =LEFT)
button2.pack(side =LEFT)
button3.pack(side =LEFT)

window.mainloop()

- pack() 함수의 옵션 중에서 수평으로 정렬하는 방법은 side = LEFT, RIGHT 입니다.

 

- side = LEFT 옵션은 왼쪽부터 채우라는 의미로 사용됩니다.


from tkinter import *

window = Tk()

btnList = [None] * 3

for i in range(0, 3) :
    btnList[i] = Button(window, text = "버튼"
                        + str(i+1))

for btn in btnList :
    btn.pack(side = RIGHT)

window.mainloop()

- 리스트와 for문을 활용해서 오른쪽부터 채웠습니다.

 

- 비어있는 리스트 3개를 준비하고 3번을 반복하면서 버튼을 생성한 뒤, 버튼 리스트를 화면에 출력했습니다.

- 수직 정렬은 side = TOP, BOTTOM으로 정렬할 수 있습니다.

TOP(위), BOTTOM(아래)

- 폭 조정은 pack() 함수의 옵션 중 윈도우 창 폭에 맞추는 방법으로 fill = X 입니다.

- 위젯 사이의 여백 조절은 pack() 함수의 옵션 중 padx = 픽셀값 또는 pady = 픽셀값 입니다.

- 위젯 내부의 여백 조절은 pack() 함수의 옵션 중 ipadx = 픽셀값 또는 ipady = 픽셀값 입니다.

- 위젯 내부와 외부 모두 여백을 주는 방법입니다.

btn.pack(side = TOP, fill = X, ipadx = 10, ipady = 10,
			padx = 10, pady = 10)

from tkinter import *

# 전역 변수 선언 부분
btnList = [None] * 9
fnameList = ["froyo.gif", "gingerbread.gif", "honeycomb.gif", "icecream.gif",
             "jellybean.gif", "kitkat.gif", "lollipop.gif", "marshmallow.gif", "nougat.gif"]
photoList = [None] * 9
i, k = 0, 0
xPos, yPos = 0, 0
num = 0

#메인 코드 부분
window = Tk()
window.geometry("210x210")

for i in range(0,9) :
    photoList[i] = PhotoImage(file = "gif/" + fnameList[i])
    btnList[i] = Button(window, image = photoList[i])

for i in range(0, 3) :
    for k in range(0, 3) :
        btnList[num].place(x = xPos, y = yPos)
        num += 1
        xPos += 70
    xPos = 0
    yPos += 70

window.mainloop()

- 고정 위치에 배치

 

- 위젯을 고정 위치에 배치하면 pack() 대신 place() 함수를 사용합니다.

 

- width와 height를 생략하면 위젯의 원래 크기로 표현됩니다.

 

- 버튼을 저장할 9개짜리 리스트를 준비하고 이미지 파일명 9개도 리스트로 준비합니다.

 

- xPos, yPos는 그림을 출력할 X, Y좌표로 사용합니다. ( 각 그림마다 70픽셀 정도를 증가시켜서 출력합니다.

 

- num은 그림의 순차 번호로 사용하는데 0부터 8까지 변할 것이고 리스트의 첨자로 사용합니다.

 

- for문을 통해 9번 반복하면서 버튼을 생성합니다.

 

- for문을 통해 3 x 3 = 9 번 반복하고 바깥 for문은 행, 안쪽 for문은 열이 바뀝니다.


from tkinter import *

# 전역 변수 선언 부분
fnameList = ["jeju1.gif", "jeju2.gif", "jeju3.gif", "jeju4.gif", "jeju5.gif",
             "jeju6.gif", "jeju7.gif", "jeju8.gif", "jeju9.gif"]
photoList = [None] * 9
num = 0

# 함수 선언 부분
def clickNext() :
    global num
    num += 1
    if num > 8 :
        num = 0
    photo = PhotoImage(file = "gif/" + fnameList[num])
    pLabel.configure(image = photo)
    pLabel.image = photo

def clickPrev() :
    global num
    num -= 1
    if num < 0 :
        num = 8
    photo = PhotoImage(file = "gif/" + fnameList[num])
    pLabel.configure(image = photo)
    pLabel.image = photo

# 메인 코드 부분
window = Tk()
window.geometry("700x500")
window.title("사진 앨범 보기")

btnPrev = Button(window, text = "<< 이전", command = clickPrev)
btnNext = Button(window, text = ">> 다음", command = clickNext)

photo = PhotoImage(file = "gif/" + fnameList[0])
pLabel = Label(window, image = photo)

btnPrev.place(x=250, y=10)
btnNext.place(x=400, y=10)
pLabel.place(x=15, y=50)

window.mainloop()

- 변수에 사진 9장을 저장합니다.

 

- PhotoImage()함수로 생성할 변수 9개를 준비해 둡니다.

 

- num은 현재 사진의 번호입니다.

 

- ClickNext()를 통해 버튼을 누르면 실행되는 함수를 만들어줍니다. 사진 번호가 최대가 8이므로 8이 넘으면 다시 0번 사진을 표시하도록 합니다.

 

- 프로그램을 실행하고 처음 표시 될 사진을 설정하고 버튼 및 이미지 위치를 place()를 통해 지정해 줍니다.


 

반응형

댓글