Appia의 IT세상

파이썬[Python] 024 tkinter 기본강의 004 Frame, Label, Listbox 본문

Python/Python Tk (GUI)

파이썬[Python] 024 tkinter 기본강의 004 Frame, Label, Listbox

Appia 2020. 1. 1. 18:58
반응형

저번 포스팅에서는 Checkbuton, Entry에 대해서 살펴보았습니다. 이번에는 Frame, Label, Listbox에 대해서 살펴보겠습니다. 

 

Frame

Frame 위젯은 주로 그룹화 할떄에 많이 사용합니다. 구역화라고 하니, 좀 이상하고 어색하게 들릴수 있습니다. Frame은 윈도우에서 하나의 칸이라고 생각하시면 조금 더 이해가 수월하지 않을까라는 생각이 듭니다. 

w = Frame(Target, option...)


앞서서 저희는 위젯 배치 방법에 대해서 살펴볼 떄 pack()메소드에 대해서 살펴보았습니다. 그 떄 하나의 Frame을 바탕으로 작업이 이루어 지다보니, top/Bottom/Left/Right부분에서 일정 부분 수정이 요구되는 것 같이 보였습니다. 그래서 이번에는 그 방식에서 Frame을 활용하여 조금 개선을 해볼까 합니다. 

먼저 앞서 사용했던 코드와 결과물을 먼저 보겠습니다. 

from tkinter import *
root = Tk()
frame = Frame(root)
frame.pack()

topbutton = Button(frame, text = "Top")
topbutton.pack( side = TOP)

leftbutton = Button(frame, text = "Left")
leftbutton.pack( side = LEFT)

rightbutton = Button(frame, text = "Rigtht")
rightbutton.pack( side = RIGHT )

letf1button = Button(frame, text = "Letf1")
letf1button.pack( side = LEFT )

bottombutton = Button(frame, text = "Bottom")
bottombutton.pack( side = BOTTOM)

abottombutton = Button(frame, text = "Bottom1")
abottombutton.pack( side = BOTTOM)

root.mainloop()


어색함이 있습니다. 이 부분을 조금 수정해 보겠습니다.  

from tkinter import *
root = Tk()
frame = Frame(root)
frame.pack(side =TOP)
frame1 = Frame(root)
frame1.pack(side =BOTTOM)
frame2 = Frame(root)
frame2.pack(side =BOTTOM)

topbutton = Button(frame, text = "Top")
topbutton.pack( side = TOP)

leftbutton = Button(frame2, text = "Left")
leftbutton.pack( side = LEFT)

rightbutton = Button(frame2, text = "Rigtht")
rightbutton.pack( side = RIGHT )

letf1button = Button(frame2, text = "Letf1")
letf1button.pack( side = LEFT )

bottombutton = Button(frame2, text = "Bottom")
bottombutton.pack( side = BOTTOM)

abottombutton = Button(frame1, text = "Bottom1")
abottombutton.pack( side = BOTTOM)

root.mainloop()


Frame을 통해서 총 3개 라인으로 구성했습니다. 좀 더 자연스럽죠? Frame을 어떻게 나누냐는 사용자 마음입니다. 저의 경우는 총 3줄로 Frame을 구성했습니다.

 

Label

 

Label은 주로 변화지 않는 텍스트를 표기 하기 위해서 사용됩니다. 저 같은 feautre명에 주로 사용합니다. feature의 속성들은 변하지만, feature 명들은 주로 변화지 않기 때문입니다. 그럼 한번 만드는 방법에 대해서 살펴보겠습니다. 

 

w = Label(target, option...)  


다음 예제를 보면서 살펴보겠습니다. 

from tkinter import *

root = Tk()

var = StringVar()
label = Label( root, textvariable = var, relief = RAISED )

var.set("Name")
label.pack(side = LEFT)
S_Var1 = StringVar()
E1 = Entry(root,textvariable = S_Var1)
E1.pack(side = RIGHT)

root.mainloop()


다음 예제를 실행하면 다음과 같은결과가 나옵니다. 

생성된 결과물의  Name 부분을 보면 텍스트에 대한 수정이 불가능합니다.  물론 여러 줄에 대한 표현도 가능합니다. 관물론, 사이즈 등의 대한 조절도 가능합니다. ( 한번 쭈욱 둘러본후, 간단한 샘플로, 사이즈 조절등에 대해서 살펴보도록 하겠습니다. 그러니 지금은 어떻게 생성하는지에 대해서 집중 부탁드립니다.) 

 

Listbox


ListBox는 특정 항목들에 대해서 나열해주는 것으로 보시면 됩니다. 개인적으로 사용 빈도는 매우 적지만, 특정 사람들은 관련해서 매우 많이 사용하는 것으로 보입니다. 그래서 간단하게 사용 방법에 대해서 살펴 보고자 합니다. 

먼저 생성은 매우 간단합니다. 

 

w = Listbox(Target, option...)  


이런 형태로 생성할 수 있습니다.  그럼 간단한 예제를 살펴보겠습니다. 

from tkinter import *

top = Tk()

Lb1 = Listbox(top)
Lb1.insert(1, "Korea")
Lb1.insert(2, "China")
Lb1.insert(3, "USA")
Lb1.insert(4, "Russia")
Lb1.insert(5, "France")

Lb1.pack()
Lb1.delete(3)
top.mainloop()


여기에서 가장 주목해야할 메소드는 (insert/delete) 입니다. insert의 경우, index와 함꼐 내용을 입력합니다.  delete의 경우 index만 입력합니다.

 

위의 예제를 실행하면 다음과 같은 결과가 나옵니다. 

 

이번 포스팅에서는 총 3가지의 위젯 (Frame, Label, Listbox)에 대해 살펴보았습니다. 나름 쉽게 설명하다고 노력해봤지만, 좀 난해한 부분이 있을 것이라고 생각합니다. 혹시 궁금하시거나, 문의 사항이 있으시면 댓글 및 방명록에 언제든지 글 남겨주세요. 

반응형
Comments