<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94%2FGUI</id>
	<title>방울뱀스터디/GUI - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94%2FGUI"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94/GUI&amp;action=history"/>
	<updated>2026-05-15T16:12:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94/GUI&amp;diff=51970&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:29, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94/GUI&amp;diff=51970&amp;oldid=prev"/>
		<updated>2021-02-07T05:29:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  창(Window) 만드는법 ==&lt;br /&gt;
 from Tkinter import *&lt;br /&gt;
 root = Tk()&lt;br /&gt;
 root.mainloop()&lt;br /&gt;
&lt;br /&gt;
== 프레임 만드는법 ==&lt;br /&gt;
창에 프레임을 만든후에 GUI객체들을 넣어준다.(그냥 root에 해도 된다.)&lt;br /&gt;
프레임은 창에 영역을 나누어 준다고 보면된다.&lt;br /&gt;
&lt;br /&gt;
 frame = Frame(root)&lt;br /&gt;
 frame.pack()&lt;br /&gt;
&lt;br /&gt;
GUI객체들을 만들어 준후에 pack을 해주어야 보이게 된다.&lt;br /&gt;
&lt;br /&gt;
==  Packer 동작원리  ==&lt;br /&gt;
pack()속에 여러가지 옵션을 설정해 줄수있다.&lt;br /&gt;
&lt;br /&gt;
side=LEFT         # 정렬방식(RIGHT, TOP, BOTTOM)&lt;br /&gt;
after=button1     # 현재 pack하려는 객체를 button1바로뒤에 만들어 준다.&lt;br /&gt;
before=button1    # 현재 pack하려는 객체를 button1바로앞에 만들어 준다.&lt;br /&gt;
fill=X            # 객체를 창의 X축크기에 맞추어서 만들어준다. Y축으로도 가능&lt;br /&gt;
padx=5, pady=5    # 각 객체들 사이의 간격을 설정한다.&lt;br /&gt;
ipadx=5, ipady=5  # 객체내부의 간격을 설정한다.&lt;br /&gt;
anchor=NW         # 객체위치를 북서쪽으로 설정. fill옵션을 사용하지않아야 제대로 보일꺼 같은...&lt;br /&gt;
 button.pack(side=LEFT, fill=X, padx=5, pady=10)&lt;br /&gt;
버튼을 왼쪽정렬에 창의 X축만큼의 크기로 여백은 가로5, 세로10으로 만들어줘라....&lt;br /&gt;
&lt;br /&gt;
 button.place(30, 30, width=70, height=25)&lt;br /&gt;
위치 및 크기를 임의로 지정&lt;br /&gt;
&lt;br /&gt;
==  데이터 입력창 ==&lt;br /&gt;
데이터를 입력하는 하얀박스..&lt;br /&gt;
 entry = Entry(frame)&lt;br /&gt;
 entry.insert(0, &amp;#039;&amp;#039;) # 처음부분에 공백 문자열을 추가&lt;br /&gt;
 entry.pack(pady=5)&lt;br /&gt;
&lt;br /&gt;
==  Label  ==&lt;br /&gt;
문자를 표시해줄수 있는 객체(영역)...&lt;br /&gt;
&lt;br /&gt;
textWrite = Label(frame, text=&amp;quot;Hello World!&amp;quot;)&lt;br /&gt;
textWrite.pack()&lt;br /&gt;
&lt;br /&gt;
==  푸시 단추 ==&lt;br /&gt;
일반적은 버튼&lt;br /&gt;
 button = Button(frame, text=&amp;quot;Push Button&amp;quot;, fg=&amp;quot;red&amp;quot;, command=frame.quit)&lt;br /&gt;
 button.pack(side=LEFT)&lt;br /&gt;
&lt;br /&gt;
pack할때 정렬 방식을 정해줄수있다. 여백지정도 가능..&lt;br /&gt;
&lt;br /&gt;
==  체크 단추 ==&lt;br /&gt;
작은 하얀박스모양이고 체크하면 v표시가 된다. &lt;br /&gt;
 var = IntVar()  # 0을 초기값으로 하는 정수 변수 ()속에 숫자를 넣어주면 그값으로 초기화됨.&lt;br /&gt;
 &lt;br /&gt;
 check = Checkbutton(frame, text=&amp;quot;Check Button&amp;quot;, variable=var, command=cb)&lt;br /&gt;
 check.pack()&lt;br /&gt;
 &lt;br /&gt;
 def cb():&lt;br /&gt;
     if var.get() == 1:&lt;br /&gt;
         w.configure(text=&amp;#039;Variable is Set&amp;#039;)&lt;br /&gt;
     elif:&lt;br /&gt;
         w.configure(text=&amp;#039;Variable is Reset&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
command는 단추를 눌렀을때 수행하는 함수를 지정한다.&lt;br /&gt;
&lt;br /&gt;
==  라디오 단추 ==&lt;br /&gt;
동그란 모양인데 선택하면 까만점(?)이 표시된다.&lt;br /&gt;
각 그룹에서 한개만 선택할수 있다.&lt;br /&gt;
 var = IntVar()  &lt;br /&gt;
 &lt;br /&gt;
 radio1 = Radiobutton(frame, text=&amp;quot;One&amp;quot;, variable=var, value=1)&lt;br /&gt;
 radio2 = Radiobutton(frame, text=&amp;quot;Two&amp;quot;, variable=var, value=2)&lt;br /&gt;
 radio1.pack(anchor=w)&lt;br /&gt;
 radio2.pack(anchor=w)&lt;br /&gt;
&lt;br /&gt;
같은 그룹내에 있는 라디오 단추들은 같은 variable을 공유해야한다.&lt;br /&gt;
(역으로 varivable이 같으면 같은 그룹이라고 봐야하는건있지...???) &lt;br /&gt;
&lt;br /&gt;
radio1단추를 선택하면 var변수의 값은 1이되고, radio2단추를 선택하면 var변수의 값이 2가된다.&lt;br /&gt;
&lt;br /&gt;
Radiobutton 함수호출에서 indicatoron=0을 넣어주면 라디오버튼모양이 푸시버튼모양으로 된다.&lt;br /&gt;
&lt;br /&gt;
==  메뉴 ==&lt;br /&gt;
&lt;br /&gt;
==  스크롤 바 ==&lt;br /&gt;
스크롤바는 대부분 리스트박스, 캔버스(Canvas)등과 함께 사용된다.&lt;br /&gt;
 scrollbar = Scrollbar(frame)&lt;br /&gt;
 scrollbar.pack(side=RIGHT, fill=Y)&lt;br /&gt;
&lt;br /&gt;
수직(수평)스크롤바를 위젯에 연결하기 위해서 2가지 일을 해야한다.&lt;br /&gt;
# 위젯(객체)의 yscrollcommand 콜백 함수를 스크롤바 set 메쏘드에 설정한다.&lt;br /&gt;
# 스크롤바의 command를 위젯의 yview에 설정하다.&lt;br /&gt;
&lt;br /&gt;
==  리스트 상자 ==&lt;br /&gt;
수직 스크롤바를 추가시킨 리스트 상자...&lt;br /&gt;
 listbox = Listbox(frame, yscrollcommand=scrollbar.set)  # 1번 작업&lt;br /&gt;
 listbox.pack(side=LEFT, fill=BOTH)&lt;br /&gt;
 scrollbar.config(command=listbox.yview)  # 2번 작업&lt;br /&gt;
수평 스크롤바사용시에는 yscrollcommand대신 xscrollcommand, yview대신 xview를 사용..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  텍스트 에디터 ==&lt;br /&gt;
다양한 텍스트 문서를 표시해줄수 잇다. 다양한 폰트나 이미지등도 가능함. 또 수정도 할수있다.&lt;br /&gt;
※Label을 텍스트를 표시만 해줄수 있음..&lt;br /&gt;
 textArea = Text(frame, width=80, height=20)&lt;br /&gt;
 textArea.pack()&lt;br /&gt;
&lt;br /&gt;
===  텍스트 삽입 방법  ===&lt;br /&gt;
 textArea.insert(END, &amp;quot;Hello&amp;quot;)&lt;br /&gt;
 textArea.insert(INSERT, &amp;quot;world&amp;quot;)&lt;br /&gt;
 textArea.insert(1.0, &amp;quot;!!!!!&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 # 버튼을 텍스트 에디터에 추가하는 방법&lt;br /&gt;
 button = Button(textArea, text=&amp;quot;Click&amp;quot;)&lt;br /&gt;
 textArea.window_create(INSERT, window=button)&lt;br /&gt;
END문 문서의 마지막에 삽입&lt;br /&gt;
INSERT는 현재 커서위치에 삽입&lt;br /&gt;
숫자는 삽입위치 지정 라인, 열&lt;br /&gt;
&lt;br /&gt;
window_create대신에 image_create를 이용하여 단추를 문서 안에 추가시킬수도 있음.&lt;br /&gt;
&lt;br /&gt;
===  텍스트 삭제 방법  ===&lt;br /&gt;
 textArea.deletet(1.0, END) # 텍스트 전체 삭제&lt;br /&gt;
 textArea.deletet(INSERT)  # 현재 문자 삭제&lt;br /&gt;
 textArea.deletet(button) # 단추 삭제&lt;br /&gt;
&lt;br /&gt;
===  텍스트 읽기   ===&lt;br /&gt;
 contents = text.get(1.0, END)&lt;br /&gt;
&lt;br /&gt;
전체 문서를 가져다가 contents 변수에 저장한다.&lt;br /&gt;
&lt;br /&gt;
 textArea.config(state=DISABLED)&lt;br /&gt;
텍스트를 읽기전용으로 만듬.(state=NORMAL로 해주면 수정가능)&lt;br /&gt;
&lt;br /&gt;
===  커서위치 알아내기  ===&lt;br /&gt;
 index = textArea.index(INSERT)&lt;br /&gt;
index에 &amp;#039;1.17&amp;#039;과 같은 값이 리턴됨.&lt;br /&gt;
&lt;br /&gt;
==  표준 대화 상자 ==&lt;br /&gt;
==  대화 상자(Dialog Box) ==&lt;br /&gt;
==  캔바스(Canvas)  ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[방울뱀스터디]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>