»ç°Ç ÁÖµµÇü ÇÁ·Î±×·¡¹Ö

Áö±Ý±îÁö ¿ì¸®´Â ¹èÄ¡ ÁöÇâ ÇÁ·Î±×·¡¹ÖÀ» »ìÆì º¸°í ÀÖ´Â ÁßÀ̾ú´Ù. ±â¾ïÇ϶ó. ÇÁ·Î±×·¥Àº '¹èÄ¡ ÁöÇâÀû'ÀÏ ¼ö À־, ½ÃÀÛÇÏ°í ³ª¼­, ¹«¾ð°¡ ÇÏ°í ¸ØÃá´Ù, ¶Ç´Â '»ç°Ç ÁÖµµÇü'ÀÏ ¼ö À־, ½ÃÀÛÇÏ°í ³ª¼­, »ç°ÇÀ» ±â´Ù¸®°í ¸ØÃ߶ó°í ¸í·ÉÀ» ¹ÞÀ» ¶§ ¸ØÃá´Ù - »ç°Ç¿¡ ÀÇÇؼ­. ¾î¶»°Ô ¿ì¸®´Â »ç°Ç ÁÖµµÇü ÇÁ·Î±×·¥À» ¸¸µå´Â°¡? ¿ì¸®´Â ÀÌ°ÍÀ» µÎ °¡Áö °üÁ¡À¸·Î »ìÆì º¼ °ÍÀÌ´Ù - ù°·Î ¿ì¸®´Â »ç°Ç ȯ°æÀ» ¸ð»çÇغ¸°í ±×¸®°í ³ª¼­ ¿ì¸®´Â ¾ÆÁÖ °£´ÜÇÑ ±¸ÀÌ(GUI)ÇÁ·Î±×·¥À» ¸¸µé °ÍÀÌ´Ù. ±× ±¸ÀÌ ÇÁ·Î±×·¥Àº »ç°ÇÀ» ¸¸µé¾î ³»´Â ȯ°æ°ú ¿î¿µÃ¼Á¦¸¦ »ç¿ëÇÑ´Ù.

»ç°ÇÀ» ¸ð»çÇϴ ȸµ¹ÀÌ

¸ðµç »ç°Ç ÁÖµµÇü ÇÁ·Î±×·¥Àº ¾îµð¿¡¼±°¡ »ç°ÇÀ» Á¢¼öÇÏ°í ó¸®Çϴ ȸµ¹À̸¦ °¡Áö°í ÀÖ´Ù. ½ÇÁ¦ÀûÀ¸·Î ¸ðµç ±¸ÀÌ ÇÁ·Î±×·¥¿¡ ÀϾ´Â °Í°ú °°ÀÌ, »ç°ÇÀº ¿î¿µÃ¼Á¦¿¡ ÀÇÇؼ­ ¸¸µé¾îÁö°Å³ª, ȤÀº Ä«¸Þ¶ó µîµî¿¡ »ç¿ëµÇ´Â °Í°ú °°Àº ³»Àå Á¦¾î ½Ã½ºÅÛÀÇ °æ¿ì¿Í °°ÀÌ, ÇÁ·Î±×·¥ ÀÚü°¡ »ç°ÇÀ» ã±âµµ ÇÑ´Ù.

¿ì¸®´Â Á¤È®ÇÏ°Ô ÇÑ°¡Áö Á¾·ùÀÇ »ç°ÇÀ» - Å°º¸µå ÀÔ·ÂÀ» - ±â´Ù¸®°í ±× °á°ú¸¦ ¾î¶² Á¾·á »ç°ÇÀÌ Á¢¼öµÉ ¶§±îÁö ó¸®ÇÏ´Â ÇÁ·Î±×·¥ Çϳª¸¦ ÀÛ¼ºÇÒ °ÍÀÌ´Ù. ¿ì¸®ÀÇ °æ¿ì¿¡ Á¾·á »ç°ÇÀº °ø¹é Å°°¡ µÉ °ÍÀÌ´Ù. ¿ì¸®´Â µé¾î¿À´Â »ç°ÇµéÀ» ´ë´ÜÈ÷ °£´ÜÇÑ ¹æ½ÄÀ¸·Î ó¸®ÇÒ °ÍÀÌ´Ù - ¿ì¸®´Â ±× Å°¿¡ ´ëÇÑ ¾Æ½ºÅ° Äڵ带 ´Ü¼øÇÏ°Ô Ãâ·ÂÇÒ °ÍÀÌ´Ù. ¿ì¸®´Â ÀÌ°ÍÀ» À§ÇÏ¿© º£ÀÌÁ÷À» »ç¿ëÇÒ °ÍÀε¥ ¿Ö³ÄÇÏ¸é º£ÀÌÁ÷Àº ¶Ù¾î³ª¸ç, ½±°Ô ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Å°¸¦ Çѹø¿¡ ÀÐÀ»¼ö Àֱ⠶§¹®ÀÌ´Ù - INKEY$·Î.

¸ÕÀú ¿ì¸®´Â ÇÁ·Î±×·¥ÀÇ ¸öü¸¦ ±¸ÇöÇÑ´Ù. ±×°ÍÀº °£´ÜÈ÷ »ç°ÇÀ» ¸ðÀ¸´Â ȸµ¹À̸¦ ½ÃÀÛÇÏ¿© ±×¸®°í À¯È¿ÇÑ »ç°ÇÀÌ Å½ÁöµÇ¸é »ç°Ç ó¸® ·çƾÀ» È£ÃâÇÑ´Ù.


' Declare the subroutines that will handle the events
DECLARE SUB dokeyevent (keypress AS STRING)
DECLARE SUB doquitevent (keypress AS STRING)

' First, clear the screen of clutter then warn the user
' of what to do to quit
CLS
PRINT "Hit space to end..."
PRINT

' Now loop forever
WHILE 1
        ky$ = INKEY$
        length = LEN(ky$)
        IF length <> 0 THEN
        ' send events to event handling functions
            IF ky$ <> " " THEN
                CALL doKeyEvent(ky$)
            ELSE
                CALL doQuitEvent(ky$)
            END IF
        END IF
WEND

ÁÖ¸ñÇÒ °ÍÀº »ç°Ç¿¡ ´ëÇÏ¿© ¹«¾ùÀ» ÇÏ´Â Áö´Â ÁÖ ¸öü¿¡°Ô º°·Î °ü½É»çÇ×ÀÌ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù, ±×°ÍÀº ´Ü¼øÈ÷ »ç°ÇÀ» ¸ð¾Æ¼­ »ç°ÇµéÀ» »ç°Ç ó¸®ÀÚ¿¡°Ô ³Ñ°ÜÁØ´Ù. »ç°ÇÀ» ³ªÆ÷ÇÏ°í ó¸®ÇÏ´Â ÀÌ µ¶¸³¼ºÀº »ç°Ç ÁÖµµ ÇÁ·Î±×·¡¹ÖÀÇ °¡Àå Áß¿äÇÑ ´É·ÂÀÌ´Ù.

ÀÌÁ¦ ¿ì¸®´Â µÎ°³ÀÇ »ç°Ç ó¸®ÀÚ¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ù °·Î, " doKeyEvent "´Â ´Ü¼øÇÏ°Ô ´­·ÁÁø Å°ÀÇ ¾Æ½ºÅ° °ªÀ» Ãâ·ÂÇÑ´Ù:

SUB doKeyEvent (keypress AS STRING)
    ' print valid keystrokes
    length = LEN(keypress)
    IF length = 1 THEN 'its simple ASCII
       PRINT ASC(keypress)
    ELSE
       IF length = 2 THEN
          'its non alphanumeric so use the 2nd char 
          PRINT ASC(MID$(keypress, 2, 1))
       END IF
    END IF
END SUB

doQuitEvent ´Â ½Ã½ÃÇÏ´Ù - ±×°ÍÀº ´ÜÁö ±× ÇÁ·Î±×·¥À» ¸ØÃá´Ù !

SUB doQuitEvent (keypress AS STRING)
    STOP
END SUB

¿ì¸®°¡ ÀÌ°ÍÀ» ¸¹Àº ÇÁ·ÎÁ§Æ®¿¡¼­ »ç¿ëÇϱâ À§ÇÏ¿© ÇÁ·¹ÀÓ¿öÅ©·Î ÀÌ°ÍÀ» ÀÛ¼ºÇÑ´Ù¸é ¿ì¸®´Â ¾Æ¸¶µµ Ãʹݺο¡ initialisationÇÔ¼ö¸¦ ±×¸®°í ÈĹݺο¡ cleanup ÇÔ¼ö¸¦ Æ÷ÇÔÇÏ°Ô µÉ °ÍÀÌ´Ù. ±×·¯¸é ÇÁ·Î±×·¡¸Ó´Â ±× ȸµ¹ÀÌ ºÎºÐÀ» »ç¿ëÇÒ ¼ö ÀÖ°í ÀڽŸ¸ÀÇ ÃʱâÈ­, ó¸® ±×¸®°í û¼Ò ÇÔ¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.

ȸµ¹ÀÌ ºÎºÐÀÌ ¿î¿µÃ¼Á¦ÀÇ È¯°æ¿¡ ³»ÀåµÈ´Ù´Â Á¡¿¡¼­ ±×°ÍÀº Á¤È®È÷ ´ëºÎºÐÀÇ ±¸ÀÌ(GUI) ÇüÅÂÀÇ È¯°æÀÌ ÇÏ´Â °ÍÀ̸ç ȤÀº ÇÁ·¹ÀÓ¿öÅ©(¿î¿µÃ¼Á¦)¿Í ¾îÇø®ÄÉÀ̼ÇÀº ¾î¶² ¸é¿¡¼­ »óÈ£°£¿¡ ÇÊ¿äÇÏ¿© »ç°Ç ó¸® ÇÔ¼ö¸¦ Á¦°øÇÏ°í ±×¸®°í ÀÌ°ÍÀ» ³¬¾Æ ä¼­ »ç°Ç ȸµ¹ÀÌ·Î Áý¾î ³ÖÀ» ¼ö ÀÖ´Ù.

±×°ÍÀ» ½ÇÇàÇؼ­ ÆÄÀ̽ãÀÇ Tkinter ±¸ÀÌ(GUI) ¶óÀ̺귯¸®¸¦ ŽÇèÇØ º¸ÀÚ.

GUI ÇÁ·Î±×·¥

ÀÌ ¿¬½À¹®Á¦¸¦ À§Çؼ­ ¿ì¸®´Â ÆÄÀ̽ã Tkinter µµ±¸¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ÀÌ°ÍÀº ÆÄÀ̽ãÀÌ Tkinter ÅøŶÀ» Æ÷ÀåÇÑ °ÍÀ¸·Î ¿ø·¡´Â Tcl¿¡ ´ëÇÑ È®ÀåÀ¸·Î ÀÛ¼ºµÇ¾î Á³À¸¸ç ¶ÇÇÑ ÆÞ¿¡µµ »ç¿ë°¡´ÉÇÏ´Ù. ÆÄÀ̽㠹öÁ¯Àº °´Ã¼ÁöÇâ ÇÁ·¹ÀÓ¿öÅ©ÀÌ¸ç ±×°ÍÀº, ³ªÀÇ °ßÇطδÂ, ¿ø·¡ÀÇ ÀýÂ÷ÀûÀÎ Tk ¹öÀüº¸´Ù ÀÏÇϱⰡ ÈξÀ ´õ ½±´Ù. ÀÌ·¯ÇÑ ±¸ÀÌ(GUI)ÀÇ ¾ç»ó¿¡ °üÇÏ¿© ³ª´Â ¸¹ÀÌ ´Ù·çÁö´Â ¾ÊÀ» °ÍÀÌ´Ù, ±× º¸´Ù´Â ÇÁ·Î±×·¡¹ÖÀÇ ½ºÅ¸ÀÏ¿¡ ÁýÁßÇÏ°í ½Í´Ù - Tkinter¸¦ »ç¿ëÇÏ¿© »ç°Ç ȸµ¹À̸¦ ó¸®ÇÏ°í ÇÁ·Î±×·¡¸Ó¿¡°Ô ±âÃÊÀûÀÎ ±¸ÀÌ(GUI)¸¦ ÀÛ¼ºÇÏ°í ±×¸®°í´Â »ç°ÇµéÀÌ µµÂøÇϴµ¥·Î ±×°ÍµéÀ» ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇØÁִµ¥ ÁýÁßÇÏ°í ½Í´Ù.

¿¹Á¦¿¡¼­ ¿ì¸®´Â ¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½ºÀÎ KeysApp¸¦ »ý¼ºÇÑ´Ù. ±×°ÍÀº __init__¸Þ½îµå ¾È¿¡ ±¸ÀÌ(GUI)¸¦ »ý¼ºÇÏ°í °ø¹éÅ°¸¦ doQuitEvent¸Þ½îµå¿¡ ¹­´Â´Ù. ±× Ŭ·¡½º´Â ¶ÇÇÑ ¿ä±¸µÇ´Â doQuitEvent ¸Þ½îµå¸¦ Á¤ÀÇÇÑ´Ù.

GUI ÀÚü´Â °£´ÜÇÏ°Ô ÅؽºÆ® ¿£Æ®¸® À§Á¬ widgetÀ¸·Î ±¸¼ºµÈ´Ù. ±×ÀÇ ±âº»ÀûÀÎ ÇàÀ§´Â ¹®ÀÚµéÀ» ½ºÅ©¸° À§¿¡ Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù.

¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½º¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº OO »ç°Ç ÁÖµµ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ¸Å¿ì ÈçÇÑ ÀÏÀÌ´Ù. ¿Ö³ÄÇϸé ÇÁ·Î±×·¥À¸·Î º¸³»¾îÁö´Â »ç°ÇÀÇ °³³ä°ú °´Ã¼¿¡ º¸³»¾îÁö´Â ¸Þ½ÃÁöÀÇ °³³ä»çÀÌ¿¡´Â ¸¹Àº À¯»çÁ¡ÀÌ Àֱ⠶§¹®ÀÌ´Ù. ±× µÎ°³ÀÇ °³³äÀº ¼­·Î°£¿¡ ¾ÆÁÖ ½±°Ô ¦Áþ±âµÈ´Ù. »ç°Ç ó¸® ÇÔ¼ö´Â ±×·±½ÄÀ¸·Î ¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½ºÀÇ ¸Þ½îµå°¡ µÈ´Ù.

Ŭ·¡½º¸¦ Á¤ÀÇÇÑ ÈÄ¿¡ ¿ì¸®´Â °£´ÜÇÏ°Ô ±×°ÍÀÇ ½Çü¸¦ ÀÛ¼ºÇÏ°í ±×¸®°í´Â ±×°Í¿¡ mainloop¸Þ½ÃÁö¸¦ º¸³»±â¸¸ ÇÏ¸é µÈ´Ù.

±× ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ:


# Use from X import * to save having to preface everything
# as tkinter.xxx
from Tkinter import *

# Create the application class which defines the GUI
# and the event handling methods
class KeysApp(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.txtBox = Text(self)
        self.txtBox.bind("", self.doQuitEvent)
        self.txtBox.pack()
        self.pack()

    def doQuitEvent(self,event):
        import sys
        sys.exit()


# Now create an instance and start the event loop running
myApp = KeysApp()
myApp.mainloop()

¹°·Ð º£ÀÌÁ÷ ¹öÀü¿¡¼­ ¿ì¸®´Â, ¿ì¸®°¡ ¿©±â¼­ ÇÑ °Íó·³ ÀμⰡ´ÉÇÑ Å°ÀÇ ¿µ¹®¼ýÀÚ ¹öÁ¯À» Ãâ·ÂÇÏ´Â °Íº¸´Ù´Â ¸ðµç Å°µéÀÇ ¾Æ½ºÅ° Äڵ带 Ãâ·ÂÇß´Ù. ¿ì¸®´Â ¾Æ¹«·± ¹æÇؾøÀÌ ´­·ÁÁø ¸ðµç Å°µéÀ» ³ªÆ÷ÇÒ ¼ö ÀÖ°í °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù. ±×·¯±â À§Çؼ­ ¿ì¸®´Â ´ÙÀ½ ¶óÀÎÀ» __init__ ¸Þ½îµå¿¡ Ãß°¡ÇÒ °ÍÀÌ´Ù:

self.txtBox.bind("< Key >", self.doKeyEvent)

±×¸®°í »ç°ÇÀ» ó¸®Çϱâ À§Çؼ­´Â ´ÙÀ½ÀÇ ¸Þ½îµå¸¦ (Ãß°¡ ÇÒ °ÍÀÌ´Ù):

def doKeyEvent(self,event):
    str = "%d\n" % event.keycode
    self.txtBox.insert(END, str)
    return "break"

ÁÖÀÇ 1: Å° °ªÀº ±× »ç°ÇÀÇ keycode Çʵ忡 ÀúÀåµÈ´Ù. ³ª´Â ±×°ÍÀ» ¹ß°ßÇϱâ À§Çؼ­ Tkinter.py ÀÇ ¼Ò½ºÄڵ带 »ìÆì º¸¾Æ¾ß¸¸ Çß´Ù... È£±â½ÉÀº ÇÁ·Î±×·¡¸ÓÀÇ °¡Àå Áß¿äÇÑ ¼Ó¼ºÀ̶ó´Â °ÍÀ» ±â¾ïÇÏ´ÂÁö?

ÁÖÀÇ 2: return "break" ´Â ¸¶¹ýÀÇ ½ÅÈ£ÀÌ´Ù. Tkinter¿¡°Ô ±× À§Á¬À» À§Çؼ­ ±âº»À¸·Î ÁöÁ¤µÈ »ç°Ç 󸮸¦ ¿äûÇÏÁö ¸øÇϵµ·Ï ÇÑ´Ù. ±× ¶óÀÎÀÌ ¾ø´Ù¸é, ±× ÅؽºÆ® »óÀÚ´Â ½ÇÁ¦·Î ŸÀÌÇÁµÇ´Â ¹®ÀÚµÚ¿¡ ¾Æ½ºÅ° Äڵ带 Ãâ·ÂÇÒ °ÍÀ̸ç, ±×°ÍÀº ¿ì¸®°¡ ¿©±â¿¡¼­ ¿øÇÑ ¹Ù°¡ ¾Æ´Ï´Ù.

ÀÌ°ÍÀ¸·Î Áö±ÝÀº ÃæºÐÇÏ´Ù. ÀÌ Ã¥Àº Tkinter¸¦ À§ÇÑ Áöħ¼­¸¦ ÀǵµÇÏÁö ¾Ê´Â´Ù. ±×°ÍÀº ´ÙÀ½ ÁÖÁ¦ÀÇ °úÁ¦ÀÌ´Ù. ¶ÇÇÑ Tk¿Í TkinterÀÇ »ç¿ë¹ý¿¡ °üÇÑ Ã¥µéµµ ÀÖ´Ù.


Previous  Next  Contents
 

¿©·¯ºÐÀÌ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÏ¿© Áú¹® ȤÀº Á¦¾È»çÇ×ÀÌ ÀÖÀ¸¸é ´ÙÀ½ ÁÖ¼Ò¸¦ ³ª¿¡°Ô ÀüÀÚ¸ÞÀÏÀ» º¸³»¶ó: agauld@crosswinds.net