Tkinter

From 탱이의 잡동사니
Revision as of 14:47, 24 December 2016 by Pchero (talk | contribs) (→‎Combobox)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

Python graphic library tkinter 내용 정리.

Concept

Widgets

위젯은 화면에서 볼수 있는 모든 것들이다. 예를 들면 button, entry, label, frame 등이 있다.

Widget Classes

위젯들은 버튼, 프레임 등으로 나타나는 클래스들의 오브젝트이다. 때문에 위젯을 사용하고자 한다면 먼저 초기화를 해주어야 한다.

Window hierarchy

Configuration options

모든 위젯들은 저마다의 다른 configuration option 들을 가지고 있다. 이 옵션들은 어떻게 display 되는지 혹은 어떻게 동작하는지를 조절하게 된다.

사용 가능한 옵션들은 위젯에 따라 달라진다. 하지만 많은 옵션들에 대해서 일관성을 유지하고 있어서 사용법이 그리 다르지는 않다. 예를 들면 button 과 label 위젯에는 "text" 라는 옵션이 있는데, display 되는 Text 를 조절하게 된다. 하지만 scrollbar 위젯에는 "text" 옵션이 없다(필요가 없으므로). 같은 이유로 "button" 위젯에는 "command" 라는 옵션이 있는 것에 반해, label 위젯에는 해당 옵션이 존재하지 않는다.

옵션 설정은 최초 위젯 생성시에 지정이 가능하며, 생성 이후에도 일부 예외를 제외하고는 대부분 변경이 가능하다. 어떤 옵션들이 사용가능한지 정확히 알지 못하는 경우에는 가능한 옵션이 어떤 것들이 있는지 물어볼 수도 있다. <source lang=python> pchero@mywork:~$ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from Tkinter import * >>> from ttk import * >>> root = Tk() >>> button = Button(root, text="Hello", command="buttonpressed") >>> button.grid() >>> button['text'] 'Hello' >>> button['text'] = "good bye" >>> button.configure("text") ('text', 'text', 'Text', , 'good bye') >>> button.configure() {'cursor': ('cursor', 'cursor', 'Cursor', , ), ... </source>

Geometry Management

위젯들을 정확하게 화면에 나타내기 위해서는 조금 다른 작업이 필요한데, 이를 geometry management 라고 한다.

앞선 예제에서는 "grid" 라는 명령을 사용했는데, 원하는 row 와 columnn 을 지정할 때 사용하는 명령이다. Grid 는 여러 개의 geometry manager 의 예제 중 하나이다.

geometry manager 는 오브젝트들을 원하는 위치에 정확히 표현하게 하는 역할을 담당한다. 이 때문에 geometry manager 에게는 많은 사항들이 요구되는데, grid 는 가장 강력한 geometry manager 중의 하나이다.

Event Handling

Command Callbacks

Event Bindings

<source lang=python> from tkinter import * from tkinter import ttk root = Tk() l =ttk.Label(root, text="Starting...") l.grid() l.bind('<Enter>', lambda e: l.configure(text='Moved mouse inside')) l.bind('<Leave>', lambda e: l.configure(text='Moved mouse outside')) l.bind('<1>', lambda e: l.configure(text='Clicked left mouse button')) l.bind('<Double-1>', lambda e: l.configure(text='Double clicked')) l.bind('<B3-Motion>', lambda e: l.configure(text='right button drag to %d,%d' % (e.x, e.y))) root.mainloop() </source>

Basic Widgets

Frame

프레임 위젯 자체는 단순한 사각형을 보여주는 위젯이다. 보통은 다른 위젯들을 포함하는 위젯으로 동작한다. <source lang=python> frame = Frame(parent) </source>

Requested Size

만약 별도의 사이즈나 위젯을 포함하지 않은 채로 Frame 을 생성하면 최소의 사이즈로 생성되게 된다. 만약 일정 크기의 빈 프레임 위젯을 생성하고자 한다면 width 와 height 옵션을 설정하면 된다.

Padding

Padding 옵션은 위젯 안쪽에 여분의 공간을 지정할 때 사용되는 옵션이다.

- 옵션 값을 하나만 지정시 : 전 방위에 같은 값의 padding 을 지정하게 된다. - 옵션 값을 두개만 지정시 : 양 옆쪽, 위/아래 쪽 으로 padding 을 지정하게 된다. - 옵션 값을 네개 지정시 : 순서대로 왼쪽, 위쪽, 오른쪽 아래쪽 순서로 padding 을 지정하게 된다. <source lang=python> frame['padding'] = (5, 10) </source>

Borders

프레임 위젯의 border 를 지정할 수 있다. <source lang=python> frame['borderwidth'] = 2 frame['relief'] = 'sunken' </source>

Label

Button

Checkbutton

Radiobutton

Entry

Combobox

Treeview

See also