Tkinter¿¡¼­ ¸¶¿ì½º ÀÔ·ÂÀÇ Ã³¸®

°íÄ£ ³¯ : 2004-01-13

¾È³çÇϼ¼¿ä~~~
Á¤¸» Á¤¸» ¿À·£¸¸ÀÌ³×¿ä ¿©·¯ºÐ~~
±×µ¿¾È ¿ÕÃʺ¸ ÆÄÀ̽ã Ã¥À» ¾²´À¶ó°í ¿Â¶óÀÎ °­Á¸¦ ÀüÇô ¸ø ¿Ã·Á¼­ Á˼ÛÇϳ׿ä. ¸¹ÀÌ ¾Æ½¬¿ì¼ÌÁÒ?
Àúµµ ¿©·¯ºÐÀ» °Ô½ÃÆÇÀ¸·Î¸¸ ¸¸³ª´Â °ÍÀÌ ¹«Ã´ ¾Æ½¬¿ü´ä´Ï´Ù.

ÄĹéÇÏ°í¼­ ù °­ÁÂÀÇ ÁÖÁ¦´Â Tkinter¿¡¼­ ¸¶¿ì½º ÀÔ·ÂÀ» ó¸®ÇÏ´Â ¹æ¹ýÀÌ¿¹¿ä.
Á¦°¡ ¿äÁò Çб³ °øºÎÇÏ´À¶ó°í Visual C++·Î À©µµ¿ì ÇÁ·Î±×·¡¹ÖÇÏ´Â ¹æ¹ýÀ» ¹è¿ì°í Àִµ¥, Àç¹ÌÀÖ´Â °ÍÀÌ Àֱ淡 ÆÄÀ̽ãÀ¸·Î ´Ù½Ã ¸¸µé¾î ºÃ°Åµç¿ä.
ÀÌ °­Á¸¦ ÀÌÇØÇϽ÷Á¸é Tkinter¿¡ ´ëÇØ¼­ ¾à°£ ¾Ë°í °è¼Å¾ßÇϴϱî¿ä, ¾ÆÁ÷ ¾È ½áº¸½Å ºÐÀº python.or.krÀÇ GUI °­Á¸¦ ÇÑ ¹ø µû¶óÇØº¸½Å ´ÙÀ½¿¡ Àо¼¼¿ä.

GUI ȯ°æ¿¡¼­´Â Űº¸µå¸¦ ´­·¶´ÙµçÁö, ¸¶¿ì½º¸¦ Ŭ¸¯Çß´ÙµçÁö ÇÏ´Â °ÍµéÀ» À̺¥Æ®(event, »ç°Ç)À̶ó°í ÇÏÁö¿ä.
ÀÌ·¯ÇÑ À̺¥Æ®´Â ¾ðÁ¦ ¹ß»ýÇÒ Áö ¾Ë ¼ö ¾øÀ¸´Ï±î ÄÄÇ»ÅÍ´Â Ç×»ó Âɱ׸®°í ¾É¾Æ¼­ À̺¥Æ®°¡ ¹ß»ýÇϱ⸦ ±â´Ù¸®°í ÀÖ´Ù°¡, À̺¥Æ®°¡ ¹ß»ýÇÏ´Â °ÍÀ» ¾Ë¾ÆÃ¤¸é Á¤ÇØÁø ÀÏÀ» ¼öÇàÇϱ¸¿ä.
´ÙÀ½Àº Tkinter¿¡¼­ÀÇ °¡Àå ±âº»ÀûÀÎ ¸¶¿ì½º À̺¥Æ® ó¸® ¿¹Á¦¶ø´Ï´Ù.

# mouse1.py

from Tkinter import *

root = Tk()

def callback(event):
    print "clicked at", event.x, event.y 

frame = Frame(root, width=100, height=100)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()
ÀÌ°É ½ÇÇàÇØº¸¸é âÀÌ Çϳª ¶ß±¸¿ä, ±× â¿¡´Ù°¡ ¸¶¿ì½º ¹öưÀ» Ŭ¸¯ÇÒ ¶§¸¶´Ù ±× Á¡ À§Ä¡°¡ ¼ýÀڷΠǥ½ÃµÇÁö¿ä.
±× À§Ä¡¸¦ ¼ýÀÚ·Î ³ªÅ¸³»ÁÖ´Â ÀÏÀ» callback() ÇÔ¼ö°¡ Çϱ¸¿ä, frameÀÇ bind() ¸Þ¼Òµå´Â ¿ÞÂʹöư(Button-1)ÀÌ ´­·ÁÁö¸é callback ÇÔ¼ö¸¦ È£ÃâÇ϶ó´Â °ÍÀ» ¾Ë·ÁÁÖ°í Àֳ׿ä.

mouse1.py ½ÇÇà ¸ð½À

ÀÚ, ÀÌ°É ¾à°£ ÀÀ¿ëÇØ¼­ ĵ¹ö½º¿¡´Ù Á¡À» Âï´Â ÇÁ·Î±×·¥À» ¸¸µé¾îº¼±î¿ä.
# mouse2.py

from Tkinter import *

root = Tk()
canvas = Canvas(root, width=300, height=300)

def callback(event):
    canvas.create_oval(event.x, event.y, event.x+1, event.y+1)

canvas.bind("<Button-1>", callback)
canvas.bind("<B1-Motion>", callback)
canvas.pack()

root.mainloop()
À̹ø¿¡´Â TkinterÀÇ root¿¡ ÇÁ·¹ÀÓ ´ë½Å ĵ¹ö½º¸¦ ¾ñ¾ú±¸¿ä, bind() ¸Þ¼Òµå´Â ¸¶¿ì½º ¿ÞÂʹöưÀ» ´©¸£°Å³ª(Button-1), ´©¸¥Ã¤·Î À̵¿ÇÏ´Â(B1-Motion) À̺¥Æ®¸¦ °¨ÁöÇØ¼­ callback ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ÇØÁá½À´Ï´Ù.
callback() ÇÔ¼ö¿¡¼­´Â ĵ¹ö½º¿¡ ¾ÆÁÖ ÀÛÀº ¿øÀ» ±×·Á¼­ Á¡À¸·Î Ç¥ÇöµÇµµ·Ï Çß±¸¿ä.

mouse2.py ½ÇÇà ¸ð½À

ÀÌ·¸°Ô ÇØ¼­ Á¡À» Âï´Â °Í±îÁö´Â ÇØº¸¾Ò´Âµ¥, ±×¸²ÆÇ °°Àº ÇÁ·Î±×·¥¿¡¼­ ¼±À» ±×¸®´Â ±â´ÉÇϰí´Â Â÷À̰¡ Àֳ׿ä.
±×¸²ÆÇ¿¡¼­´Â ¸¶¿ì½º ¹öưÀ» ´©¸£°í À̵¿Çϸé À̾îÁø ¼±ÀÌ ±×·ÁÁö´Âµ¥ ºñÇØ À§ÀÇ ¿¹Á¦´Â ¶ç¾ö¶ç¾ö Á¡ÀÌ ÂïÈ÷´Ï±î¿ä.
¾î¶»°ÔÇÏ¸é ±×¸²ÆÇó·³ ¼±ÀÌ ±×·ÁÁöµµ·Ï ÇÒ ¼ö ÀÖÀ»±î¿ä?
´äÀº °£´ÜÇÕ´Ï´Ù. Á¡°ú Á¡À» À̾ ¼±À» ±×·ÁÁÖ´Â °Å¿¹¿ä.--;

# mouse3.py

from Tkinter import *

root = Tk()
canvas = Canvas(root, width=300, height=300)

def draw(event):
    global x0, y0
    canvas.create_line(x0, y0, event.x, event.y)
    x0, y0 = event.x, event.y

def down(event):
    global x0, y0
    x0, y0 = event.x, event.y

def up(event):
    global x0, y0
    if (x0, y0) == (event.x, event.y):
        canvas.create_line(x0, y0, x0+1, y0+1)

canvas.bind("<B1-Motion>", draw)
canvas.bind("<Button-1>", down)
canvas.bind("<ButtonRelease-1>", up)
canvas.pack()
root.mainloop()
¿¹Á¦ÀÇ draw() ÇÔ¼ö¸¦ º¸½Ã¸é x0, y0°¡ ¹æ±Ý Áö³ªÃÆ´ø Á¡ÀÇ À§Ä¡¸¦ ±â¾ïÇϰí ÀÖ´Ù°¡, »õ·Î¿î Á¡ÀÌ ¼±ÅÃµÇ¸é µÎ Á¡À» À̾ ¼±À» ±×·ÁÁشٴ °É ¾Ë ¼ö ÀÖÀ» °Å¿¹¿ä.
±×¸®°í ¼±À» ±×¸®´Ù°¡ ¸¶¿ì½º ¹öưÀ» ³õ°í ´Ù½Ã Ŭ¸¯ÇÏ´Â °æ¿ì¿¡´Â Á¡ÀÇ À§Ä¡¸¦ »õ·Î Àâ¾ÆÁà¾ßÇϱ⠶§¹®¿¡ down() ÇÔ¼ö¸¦ ¸¸µé¾îÁáÁö¿ä.
¶Ç, Á¦ÀÚ¸®¿¡¼­ Ŭ¸¯Çß´Ù°¡ ¹Ù·Î ¼ÕÀ» ¶¼´Â °æ¿ì(ÀÌ ¶§ ButtonRelease-1 À̺¥Æ®°¡ ¹ß»ýÇÔ)¿¡´Â Á¡À» Âï¾îÁÖ·Á°í up() ÇÔ¼öµµ ¸¸µé¾îÁᱸ¿ä.
ÀÌ ¿¹Á¦°¡ ½ÇÇàµÈ ¸ð½ÀÀº ¾Æ·¡¿Í °°½À´Ï´Ù.

mouse3.py ½ÇÇà ¸ð½À

ÀÌ·¸°Ô ÇØ¼­ ¸¶¿ì½º¿¡ °ü·ÃµÈ À̺¥Æ® ¼¼ °¡Áö¸¦ ´Ù·ïº¸¾Ò´Âµ¥¿ä, ±×¹Û¿¡µµ <Double-Button-1>(¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» ´õºí Ŭ¸¯)¶óµçÁö <Shift-Button-1>(Shift ۸¦ ´©¸¥ »óÅ¿¡¼­ ¸¶¿ì½º ¿ÞÂÊ ¹öư Ŭ¸¯)¿Í °°ÀÌ ¿©·¯ °¡Áö À̺¥Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´ä´Ï´Ù.

¿À·£¸¸¿¡ ¿¹Á¦¸¦ ¸¸µé°í °­Á¸¦ ½áº¸´Ï±î Âü Àç¹ÌÀֳ׿ä. °£´ÜÇÑ °ÅÁö¸¸ ¿©·¯ºÐ¿¡°Ô Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÁÁ°Ú½À´Ï´Ù.
´ÙÀ½ °­Á´ ¶Ç ¾ðÁ¦ ¾²°Ô µÉ Áö ¸ð¸£°Ú³×¿ä. ±× ¶§±îÁö ¸ðµÎµé ¾È³ç~