창(Window) 만드는법

~cpp 
from Tkinter import *
root = Tk()
root.mainloop()

프레임 만드는법

창에 프레임을 만든후에 GUI객체들을 넣어준다.(그냥 root에 해도 된다.)
프레임은 창에 영역을 나누어 준다고 보면된다.

~cpp 
frame = Frame(root)
frame.pack()

GUI객체들을 만들어 준후에 pack을 해주어야 보이게 된다.

Packer 동작원리

pack()속에 여러가지 옵션을 설정해 줄수있다.

side=LEFT # 정렬방식(RIGHT, TOP, BOTTOM)
after=button1 # 현재 pack하려는 객체를 button1바로뒤에 만들어 준다.
before=button1 # 현재 pack하려는 객체를 button1바로앞에 만들어 준다.
fill=X # 객체를 창의 X축크기에 맞추어서 만들어준다. Y축으로도 가능
padx=5, pady=5 # 각 객체들 사이의 간격을 설정한다.
ipadx=5, ipady=5 # 객체내부의 간격을 설정한다.
anchor=NW # 객체위치를 북서쪽으로 설정. fill옵션을 사용하지않아야 제대로 보일꺼 같은...
~cpp 
button.pack(side=LEFT, fill=X, padx=5, pady=10)
버튼을 왼쪽정렬에 창의 X축만큼의 크기로 여백은 가로5, 세로10으로 만들어줘라....

~cpp 
button.place(30, 30, width=70, height=25)
위치 및 크기를 임의로 지정

데이터 입력창

데이터를 입력하는 하얀박스..
~cpp 
entry = Entry(frame)
entry.insert(0, '') # 처음부분에 공백 문자열을 추가
entry.pack(pady=5)

Label

문자를 표시해줄수 있는 객체(영역)...

textWrite = Label(frame, text="Hello World!")
textWrite.pack()

푸시 단추

일반적은 버튼
~cpp 
button = Button(frame, text="Push Button", fg="red", command=frame.quit)
button.pack(side=LEFT)

pack할때 정렬 방식을 정해줄수있다. 여백지정도 가능..

체크 단추

작은 하얀박스모양이고 체크하면 v표시가 된다.
~cpp 
var = IntVar()  # 0을 초기값으로 하는 정수 변수 ()속에 숫자를 넣어주면 그값으로 초기화됨.

check = Checkbutton(frame, text="Check Button", variable=var, command=cb)
check.pack()

def cb():
    if var.get() == 1:
        w.configure(text='Variable is Set')
    elif:
        w.configure(text='Variable is Reset')

command는 단추를 눌렀을때 수행하는 함수를 지정한다.

라디오 단추

동그란 모양인데 선택하면 까만점(?)이 표시된다.
각 그룹에서 한개만 선택할수 있다.
~cpp 
var = IntVar()  

radio1 = Radiobutton(frame, text="One", variable=var, value=1)
radio2 = Radiobutton(frame, text="Two", variable=var, value=2)
radio1.pack(anchor=w)
radio2.pack(anchor=w)

같은 그룹내에 있는 라디오 단추들은 같은 variable을 공유해야한다.
(역으로 varivable이 같으면 같은 그룹이라고 봐야하는건있지...???)

radio1단추를 선택하면 var변수의 값은 1이되고, radio2단추를 선택하면 var변수의 값이 2가된다.

Radiobutton 함수호출에서 indicatoron=0을 넣어주면 라디오버튼모양이 푸시버튼모양으로 된다.

메뉴


스크롤 바

스크롤바는 대부분 리스트박스, 캔버스(Canvas)등과 함께 사용된다.
~cpp 
scrollbar = Scrollbar(frame)
scrollbar.pack(side=RIGHT, fill=Y)

수직(수평)스크롤바를 위젯에 연결하기 위해서 2가지 일을 해야한다.
1. 위젯(객체)의 yscrollcommand 콜백 함수를 스크롤바 set 메쏘드에 설정한다.
2. 스크롤바의 command를 위젯의 yview에 설정하다.

리스트 상자

수직 스크롤바를 추가시킨 리스트 상자...
~cpp 
listbox = Listbox(frame, yscrollcommand=scrollbar.set)  # 1번 작업
listbox.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=listbox.yview)  # 2번 작업
수평 스크롤바사용시에는 yscrollcommand대신 xscrollcommand, yview대신 xview를 사용..


텍스트 에디터

다양한 텍스트 문서를 표시해줄수 잇다. 다양한 폰트나 이미지등도 가능함. 또 수정도 할수있다.
※Label을 텍스트를 표시만 해줄수 있음..
~cpp 
textArea = Text(frame, width=80, height=20)
textArea.pack()

텍스트 삽입 방법

~cpp 
textArea.insert(END, "Hello")
textArea.insert(INSERT, "world")
textArea.insert(1.0, "!!!!!")

# 버튼을 텍스트 에디터에 추가하는 방법
button = Button(textArea, text="Click")
textArea.window_create(INSERT, window=button)
END문 문서의 마지막에 삽입
INSERT는 현재 커서위치에 삽입
숫자는 삽입위치 지정 라인, 열

window_create대신에 image_create를 이용하여 단추를 문서 안에 추가시킬수도 있음.

텍스트 삭제 방법

~cpp 
textArea.deletet(1.0, END) # 텍스트 전체 삭제
textArea.deletet(INSERT)  # 현재 문자 삭제
textArea.deletet(button) # 단추 삭제

텍스트 읽기

~cpp 
contents = text.get(1.0, END)

전체 문서를 가져다가 contents 변수에 저장한다.

~cpp 
textArea.config(state=DISABLED)
텍스트를 읽기전용으로 만듬.(state=NORMAL로 해주면 수정가능)

커서위치 알아내기

~cpp 
index = textArea.index(INSERT)
index에 '1.17'과 같은 값이 리턴됨.

표준 대화 상자

대화 상자(Dialog Box)

캔바스(Canvas)

Retrieved from http://wiki.zeropage.org/wiki.php/방울뱀스터디/GUI
last modified 2021-02-07 05:29:35