120 likes | 497 Views
Python Essential 세미나. 2001. 4. 25( 수 ). Gui 프로그래밍 - Tkinter. 발표자 : 박승기. ● Tkinter. Tkinter 모듈 (“ Tkinterface”) 은 Tk GUI toolkit 을 이용하는 표준 파 일썬 인터페이스이다 . Tk 와 Tkinter 는 Linux/Unix , Windows, Macintosh 에서 사용가능 import Tkinter 혹은 from Tkinter from * : 모듈을 사용하기위한 방법
E N D
Python Essential 세미나 2001. 4. 25(수) Gui 프로그래밍 - Tkinter 발표자 : 박승기
● Tkinter • Tkinter 모듈(“ Tkinterface”)은 Tk GUI toolkit을 이용하는 표준 파 일썬 인터페이스이다. • Tk 와 Tkinter는 Linux/Unix , Windows, Macintosh 에서 사용가능 • import Tkinter 혹은 from Tkinter from * : 모듈을 사용하기위한 방법 • root=Tk() : Tkinter를 초기화하기 위해서 Tk root위젯을 만들어야 한다. root 위젯은 가장 먼저 만들어져야 하며 각 프로그램에 단 한 개만 존 재할 수 있다. • w = Label(root, text="Hello, world!") w.pack() : Label 위젯은 텍스트, 아이콘 혹은 이미지 등을 표시할 수 있다. 텍스트를 출력하기 위해서 text 옵션을 사용한다. 그리곤, pack() 을 호출하는데, 주어진 텍스트에 맞게 크기를 조절하고 그 자 체를 보이게 하는 것이다. Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적
●기본 Widget 생성 Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 • from Tkinter import *root=Tk() • root.mainloop(). • [소스 설명] • root=Tk() : 새로운 widget이 열린다. • root.mainloop() :이 프로그램은 윈도우를 닫을 때 까지 이벤트 루프에 머문다. 이것은 사용자로부터 혹은 윈도우로부터의 이벤트를 처리하는 한다(디스플레이 업데이트를 포함해서). root 윈도우는 pack하지 않아도 자동적으로 디스플레이된다 [예제결과]
● PUSH button from Tkinter import * class App: def __init__(self, master): frame = Frame(master)frame.pack() # 프레임이 보이게 한다. self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)self.button.pack(side=LEFT) self.w = Button(frame, text="Hello", command=self.say_hi)self.w.pack() def say_hi(self):print "hi there, everyone!" root = Tk() app = App(root) root.mainloop() Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 [예제 결과]: Hello 버튼실행시 :
● RADIO button(1) from Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() MODES = [("Monochrome", "1"), ("Grayscale", "L"), ("True color", "RGB"), ("Color separation", "CMYK")] # 스트링 변수 생성 self.v = StringVar() self.v.set("L") # 초기값 설정 for text, mode in MODES: # MODES의 터플에 라디오버튼 생성 b = Radiobutton(frame, text=text, variable=self.v, value=mode, command=self.rb) b.pack(anchor=W, fill='x') # fill='x' : 버튼을 x축 끝까지 채워라 self.w = Label(master, text=self.v.get()) self.w.pack() def rb(self): self.w.configure(text=self.v.get()) root = Tk() app = App(root) root.mainloop() Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적
● RADIO button(2) Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 • [소스설명] • 터플의 리스트를 만든다 (표시할 문자열, 변수 값) • MODES = [("Monochrome", "1"), ("Grayscale", "L"), ("True color", "RGB"), ("Color separation", "CMYK")] • 먼저 버튼 옆에 표시할 문자열과 그 버튼이 선택되었을 때 변수가 취할 값의 터플의 리스트(MODES)를 만든다. 다음으로는 변수를 생성한다. 이번에는 문자열 변수(v)를 생성하고 버튼이 선택되면 문자열 값이 변수에 저장되도록 한다. 초기 값을 v.set('L') 설정한다. [예제결과] If > b = Radiobutton(indicatoron=0, text=text,variable=self.v, value=mode,command=self.rb)
● Packer 동작 원리 • Packer : '짐을 싸다‘ 라는 뜻이 있으므로, 상자의 왼쪽부터 물건을 놓는다고 생각하면 쉬울 것이다. • 수평배치 from Tkinter import * root = Tk() widget1 = Button(root, text="Widget1") widget2 = Button(root, text="Widget2") widget3 = Button(root, text="Widget3") widget1.pack(side=LEFT) widget2.pack(side=LEFT) widget3.pack(side=LEFT) root.mainloop() Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 [예제결과] If >widget1.pack(side=TOP) widget2.pack(side=TOP) widget3.pack(side=TOP)
● Widget 삽입/채우기 Widget 삽입 • 어떤 위젯다음에 자신의 위젯을 삽입할 경우 after를 사용 ex) widget1.pack(after=widget) • 어떤 위젯앞에 자신의 위젯을 삽입할 경우 before를 사용 ex) widget1.pack(before=widget) Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 Widget 채우기 • pack method를 호출할때 fill=X, fill=Y 를 사용하여 각 축을 기준으로 위젯들을 크게하여 맞춘다. [Widget 삽입 예제결과] [Widget 채우기 예제결과]
●메뉴바와 단축기(1) from Tkinter import *def print_msg(msg): w.configure(text=msg)def menu_new(event=None): print_msg("New called")def menu_open(event=None): print_msg("Open called")def menu_about(event=None): print_msg("About called")def menu_exit(event=None): root.quit () root.destroy()root=Tk()#creat menumenu=Menu(root) # 최상위 윈도우 위젯.menu를 부모로하는 filemenuroot.config(menu=menu) # root에게 menu 객체를 알려준다. Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적
●메뉴바와 단축기(2) Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 w=Label(root, text="Hello world!", width=50, height=3) # 초기화면에 띄어질 Label 함수.w.pack()filemenu=Menu(menu) # menu를 부모로 하는 새로운 객체 메뉴 filemenu를 만든다.menu.add_cascade(label="File", menu=filemenu) # menu 객체에 filemenu를 추가한다.filemenu.add_command(label="New",underline=0,accelerator="Ctrl+N",command=menu_new) # 일반메뉴 추가.filemenu.add_command(label="Open",underline=0,accelerator="Ctrl+O",command=menu_open)filemenu.add_separator() #선으로 구분해준다.filemenu.add_command(label="Exit",underline=1,accelerator="Alt+x“,command=menu_exit)helpmenu=Menu(menu) # menu를 부모로 하는 새로운 객체 메뉴 helpmenu를 만든다.menu.add_cascade(label="Help", menu=helpmenu)helpmenu.add_command(label="About", command=menu_about)root.bind("<Control-n>",menu_new)root.bind("<Control-o>",menu_open)root.bind("<Alt-Key-x>",menu_exit)root.mainloop()
● Event and Bindings • 모든 위젯은 bind 메써드를 이용하여 이벤트를 메써드나 함수에 연결 시킬 수 있다. 만일 event에 해당하는 이벤트가 발생하면 ha ndler가 호출된다. 형식) widget.bind(event.handler) Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 • Event의 종류 <Button-1> : 마우스버튼이 위젯 위에서 눌려짐. 1은 왼쪽, 2는 가운데, 3은 오른쪽 버튼이다. • <B1-Motion> : 버튼이 1이 눌린상태로 마우스가 움직인다. • <Enter> : 마우스 포인터가 위젯 상으로 이동했다. • <Leave> : 마우스 포인터가 위젯을 벗어났다. • <Shift-Up> : 사용자가 시프트키를 누른 상태에서 위로 화살표 버튼을 누른다. • <Configure> : 위젯의 크기가 변했다. 새로운 위젯의 크기는 event객체의 width,height 멤버로 • 주어진다. • Event의 객체 <Widget> : 이벤트를 발생시킨 위젯. 이름이 아닌 Tkinter 위젯 인스턴스이다. • <x,y> : 현재 마우스의 위치 • <char> : 문자코드 스트링으로 전달 • <keysym> : 키 심볼 • <keycode> : 키 코드 • <width,height>: 위젯의 새로운 크기(픽셀)
● 참고서적 및 사이트 Tkinter 기본 widget생성 Push button Radio button Packer 동작원리 Widget 삽입 메뉴바와 단축기 이벤트와 바인딩 참고서적 • Programming Python 2nd Edition • (Mark Lutz, O’REILLY®) • -http://www.pythonware.com/library/tkinter • /introduction/index.htm • Teach your self Python in 24 hours • (SAMS)