Áö±Ý±îÁö ¿ì¸®´Â ¹èÄ¡ ÁöÇâ ÇÁ·Î±×·¡¹ÖÀ» »ìÆì º¸°í ÀÖ´Â ÁßÀ̾ú´Ù. ±â¾ïÇ϶ó. ÇÁ·Î±×·¥Àº '¹èÄ¡ ÁöÇâÀû'ÀÏ ¼ö ÀÖ¾î¼, ½ÃÀÛÇÏ°í ³ª¼, ¹«¾ð°¡ ÇÏ°í ¸ØÃá´Ù, ¶Ç´Â '»ç°Ç ÁÖµµÇü'ÀÏ ¼ö ÀÖ¾î¼, ½ÃÀÛÇÏ°í ³ª¼, »ç°ÇÀ» ±â´Ù¸®°í ¸ØÃß¶ó°í ¸í·ÉÀ» ¹ÞÀ» ¶§ ¸ØÃá´Ù - »ç°Ç¿¡ ÀÇÇØ¼. ¾î¶»°Ô ¿ì¸®´Â »ç°Ç ÁÖµµÇü ÇÁ·Î±×·¥À» ¸¸µå´Â°¡? ¿ì¸®´Â À̰ÍÀ» µÎ °¡Áö °üÁ¡À¸·Î »ìÆì º¼ °ÍÀÌ´Ù - ù°·Î ¿ì¸®´Â »ç°Ç ȯ°æÀ» ¸ð»çÇØº¸°í ±×¸®°í ³ª¼ ¿ì¸®´Â ¾ÆÁÖ °£´ÜÇÑ ±¸ÀÌ(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) ¶óÀ̺귯¸®¸¦ ŽÇèÇØ º¸ÀÚ.
ÀÌ ¿¬½À¹®Á¦¸¦ À§Çؼ ¿ì¸®´Â ÆÄÀ̽ã 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ÀÇ »ç¿ë¹ý¿¡ °üÇÑ Ã¥µéµµ ÀÖ´Ù.
¿©·¯ºÐÀÌ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÏ¿© Áú¹® ȤÀº Á¦¾È»çÇ×ÀÌ ÀÖÀ¸¸é ´ÙÀ½ ÁÖ¼Ò¸¦ ³ª¿¡°Ô ÀüÀÚ¸ÞÀÏÀ» º¸³»¶ó: agauld@crosswinds.net