Tkinter·Î ÇÏ´Â GUI ÇÁ·Î±×·¡¹Ö

ÀÌ ÁÖÁ¦¿¡¼­ ¿ì¸®´Â ¾î¶»°Ô ±¸ÀÌ ÇÁ·Î±×·¥ÀÌ ÀϹÝÀûÀ¸·Î Á¶¸³µÇ´Â°¡, ±×¸®°í ¾î¶»°Ô ÀÌ°ÍÀÌ ÆÄÀ̽㠺»·¡ÀÇ GUI ÅøŶÀÎ, Tkinter¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºµÇ´Â°¡¸¦ »ìÆ캼 °ÍÀÌ´Ù. ÀÌ°ÍÀº Tkinter ÀÇ ¿ÏÀüÇÑ ÂüÁ¶¼­µµ ¾Æ´Ï¸ç ´õ±¸³ª ¿ÏÀüÇÑ Áöħ¼­µµ ¾Æ´Ï´Ù. ÀÌ¹Ì ÈǸ¢ÇÏ°Ô ÁÁÀº ±×¸®°í »ó¼¼ÇÑ Áöħ¼­°¡ ÆÄÀ̽ã À¥»çÀÌÆ®·ÎºÎÅÍ ¸µÅ©µÇ¾î ÀÖ´Ù. ÀÌ Áöħ¼­´Â ´ë½Å¿¡ ¿©·¯ºÐÀ» GUI ÇÁ·Î±×·¡¹ÖÀÇ ±âÃÊ·Î À̲ø¾î ÁÖ°í, ±âº»ÀûÀÎ GUI ÄÞÆ÷³ÍÆ®µé°ú ±× »ç¿ë¹ýÀ» ¼Ò°³ÇÑ´Ù. ¿ì¸®´Â ¶ÇÇÑ, ¾î¶»°Ô °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹ÖÀÌ GUI ¾îÇø®ÄÉÀ̼ÇÀ» Á¶Á÷È­Çϴµ¥ µµ¿òÀ» ÁÖ´ÂÁö »ìÆì º¼ °ÍÀÌ´Ù.

GUI ±âº» ¿ø¸®

³»°¡ ¸»ÇÏ°íÀÚ Çϴ ù ¹ø°´Â ¿©·¯ºÐÀº ¿©±â¿¡¼­ ÇÁ·Î±×·¡¹Ö¿¡ °üÇÏ¿© »õ·Î¿î °ÍÀ» ¹è¿ï °ÍÀÌ ¾ø´Ù´Â °ÍÀÌ´Ù. GUI Çϳª¸¦ ÇÁ·Î±×·¥ÇÏ´Â °ÍÀº ´Ù¸¥ ¾î¶² Á¾·ùÀÇ ÇÁ·Î±×·¡¹Ö°úµµ Á¤È®È÷ ¶È °°´Ù. ¿©·¯ºÐÀº ¿¬¼Ó¿­, ȸµ¹ÀÌ, ºÐ±â ±×¸®°í ¸ðµâÀ» Àü°ú ¶È °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Â÷ÀÌÁ¡À̶ó¸é GUI ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ¿©·¯ºÐÀº º¸Åë ÅøŶToolkitÀ» »ç¿ëÇØ¾ß Çϸç ÅøŶ ¹èÆ÷ÀÚ°¡ ¼³Á¤ÇÑ ÇÁ·Î±×·¥ µðÀÚÀÎÀÇ ÆÐÅÏÀ» µû¶ó¾ß¸¸ ÇÑ´Ù´Â °ÍÀÌ´Ù. »õ·Î¿î ÅøŶÀº °¢ÀÚ ÀڽŸ¸ÀÇ API¿Í µðÀÚÀÎ ±ÔÄ¢ÀÇ ÁýÇÕÀ» °¡Áú °ÍÀÌ¸ç ¿©·¯ºÐÀº ÇÁ·Î±×·¡¸Ó·Î¼­ À̰͵éÀ» ¹è¿ï ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ¸ðµç ÇÁ·Î±×·¡¸ÓµéÀÌ ¿©·¯ ¾ð¾îµé¿¡¼­ »ç¿ë°¡´ÉÇÑ ¿À·ÎÁö ¸î°³ÀÇ ÅøŶ¿¡ Ç¥ÁØÀ» ÁöÅ°·Á°í ÇÏ´Â ÀÌÀ¯ÀÌ´Ù - »õ·Î¿î ÅøŶÀ» ¹è¿ì´Â °ÍÀº »õ·Î¿î ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ¹è¿ì´Â °Íº¸´Ù ÈξÀ ´õ Èûµç °æÇâÀÌ ÀÖ´Ù!

¿ì¸®´Â Tk ÅøŶÀ» »ìÆ캼 °ÍÀÌ´Ù. ±×°ÍÀº Tcl, Perl ±×¸®°í Python¿¡¼­ »ç¿ëµÈ´Ù. TkÅøŶÀÇ ¿ø¸®´Â ´Ù¸¥ ÅøŶµé°ú ¾à°£ ´Ù¸£´Ù. ±×·¡¼­ ³ª´Â ÆÄÀ̽ã(±×¸®°í C/C++)¿¡ »ç¿ëµÇ´Â ¶Ç ´Ù¸¥ ÀαâÀÖ´Â GUI ÅøŶÀ» ª°Ô »ìÆ캸°í °á·ÐÀ» ³»¸®·Á°í ÇÑ´Ù. ÆÄÀ̽ãÀº ±× Á¢±Ù¹ý¿¡¼­ º¸´Ù °ü·ÊÀûÀÌÁö¸¸ ±×·¯³ª ¸ÕÀú ¾à°£ÀÇ ÀϹÝÀûÀÎ ¿ø¸®µéÀ» »ìÆ캻´Ù:

¿ì¸®°¡ ÀÌ¹Ì ¸î ¹øÀ̳ª Àü¼úÇÑ ¹Ù¿Í °°ÀÌ GUI ¾îÇø®ÄÉÀ̼ÇÀº °ÅÀÇ Ç×»ó ÀÚ¿¬ÀûÀ¸·Î »ç°Ç ÁÖµµÀûÀÌ´Ù. ¿©·¯ºÐÀÌ ±×°ÍÀÌ ¹«¾ùÀÎÁö ±â¾ïÇÏÁö ¸øÇÏ°Ú´Ù¸é µ¹¾Æ°¡¶ó. °¡¼­ »ç°Ç ÁÖµµÇü ÇÁ·Î±×·¡¹Ö ÀÇ ÁÖÁ¦ÀåÀ» »ìÆ캸¶ó.

³ª´Â ¿©·¯ºÐÀÌ ÀÌ¹Ì »ç¿ëÀڷμ­ GUI¿¡ Àͼ÷ÇÏ´Ù°í °¡Á¤ÇÏ°Ú´Ù. ±×¸®°í ÇÁ·Î±×·¡¸ÓÀÇ °üÁ¡¿¡¼­ ±¸ÀÌ ÇÁ·Î±×·¥ÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¿¡ ´ëÇÏ¿© ÁýÁßÇÏ¿© ´Ù·ê °ÍÀÌ´Ù. ³ª´Â ¾î¶»°Ô °Å´ëÇÏ°í º¹ÀâÇÑ ±¸À̸¦, ´ÙÁß À©µµ¿ì, MDI ÀÎÅÍÆäÀ̽º µîµîÀ» »ç¿ëÇÏ¿© ÀÛ¼ºÇÒ ¼ö ÀÖ´ÂÁö¿¡ °üÇÏ¿© ÀÚ¼¼ÇÏ°Ô ´Ù·çÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ³ª´Â ¾à°£ÀÇ ¶óº§, ¹öÆ°, ÅؽºÆ® »óÀÚ¿Í ¸Þ½ÃÁö »óÀÚ¸¦ °¡Áö´Â ÇÑ°³ÀÇ À©µµ¿ì ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇϱâ À§ÇÑ ±âÃʸ¦ ¼¼¿ì´Âµ¥ ÁÖ·ÂÇÒ °ÍÀÌ´Ù.

¹«¾ùº¸´Ùµµ ¸ÕÀú, ¿ì¸®´Â ¿ì¸®ÀÇ ¾îÈÖ¸¦ Á¡°ËÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ±¸ÀÌ ÇÁ·Î±×·¡¹ÖÀº ÀڽŸ¸ÀÇ ÇÁ·Î±×·¥ ¿ë¾îÀÇ ÁýÇÕÀ» °¡Áø´Ù. °¡Àå ÈçÇÑ ¿ë¾îµéÀ» ¾Æ·¡ÀÇ Ç¥¿¡ ±â¼úÇÑ´Ù:

¿ë¾î¼³ ¸í
Window ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÇÏ¿© ÅëÁ¦µÇ´Â ½ºÅ©¸°ÀÇ ÇÑ ±¸¿ª. À©µµ¿ì´Â º¸Åë »ç°¢ÇüÀÌÁö¸¸ ±¸ÀÌ È¯°æ¿¡¼­´Â ´Ù¸¥ ¸ð¾çµµ Çã¿ëÇÑ´Ù À©µµ¿ì´Â ´Ù¸¥ À©µµ¿ì¸¦ ´ãÀ» ¼ö ÀÖ´Ù. ±×¸®°í ¾ÆÁÖ ÀÚÁÖ ¸ðµç °³°³ÀÇ ±¸ÀÌ ÄÜÆ®·ÑÀº Àڱ⠽º½º·ÎÀÇ Æ¯¼º»ó ÇϳªÀÇ À©µµ¿ì·Î °£ÁֵȴÙ.
Control ÄÜÆ®·ÑÀ̶õ ¾îÇø®ÄÉÀ̼ÇÀ» Á¦¾îÇϴµ¥ »ç¿ëµÇ´Â ±¸ÀÌ °´Ã¼ÀÌ´Ù. ÄÜÆ®·ÑÀº ¼Ó¼ºµéÀ» °¡Áö¸ç º¸Åë »ç°ÇÀ» »ý¼ºÇÑ´Ù. º¸Åë, ÄÜÆ®·ÑÀº ¾îÇø®ÄÉÀÌ¼Ç ¼öÁØÀÇ °´Ã¼¿¡ ¹ÝÀÀÇÑ´Ù ±×¸®°í »ç°ÇÀº ±× »óÀÀÇÏ´Â °´Ã¼ÀÇ ¸Þ½îµå¿Í ¦ÀÌµÇ¾î ±×¸®ÇÏ¿© »ç°ÇÀÌ ÀϾ ¶§ ±× °´Ã¼´Â ÀÚ½ÅÀÇ ¸Þ½îµåÁß Çϳª¸¦ ½ÇÇàÇÑ´Ù. ±¸ÀÌ È¯°æÀº º¸ÅëÀº »ç°Ç°ú ¸Þ½îµå¸¦ ¿«´Â ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù.
Widget ÄÜÆ®·ÑÀº, ¶§·Î´Â º¸¿©Áö´Â °´Ã¼·Î Á¦ÇѵȴÙ. (ŸÀÌ¸Ó¿Í °°Àº) ¾î¶² ÄÜÆ®·ÑÀº ÁÖ¾îÁø À©µµ¿ì¿Í ¿¬°üµÉ ¼ö´Â ÀÖÁö¸¸ º¸¿©Áú ¼ö´Â ¾ø´Ù. À§Á¬Àº ÄÜÆ®·ÑÀÇ ÇϺμ¼Æ®·Î¼­ º¸¿©Áú ¼ö ÀÖÀ¸¸ç »ç¿ëÀÚ³ª ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ­ Á¶ÀÛµÉ ¼ö ÀÖ´Ù. ¿ì¸®°¡ ´Ù·ê À§Á¬Àº ´ÙÀ½°ú °°´Ù:
  • Frame
  • Label
  • Button
  • Text Entry
  • Message boxes

¿ì¸®°¡ ÀÌ ÁÖÁ¦¿¡¼­ ´Ù·çÁö´Â ¾Ê°ÚÁö¸¸ ÀÌ Áöħ¼­ÀÇ ¾îµð¿¡¼±°¡ »ç¿ëµÇ´Â °ÍµéÀº ´ÙÀ½°ú °°´Ù:

  • Text box
  • Radio Button
¸¶Áö¸·À¸·Î, ÀüÇô ³íÀÇ µÇÁö ¾ÊÀ» °ÍµéÀº ´ÙÀ½°ú °°´Ù:
  • Canvas - ±×¸®±â
  • Check button - ´ÙÁß ¼±ÅÃ
  • Image - BMP, GIF, JPEG ±×¸®°í PNG À̹ÌÁö¸¦ Ãâ·ÂÇϱâ
  • Listbox - ¸®½ºÆ®¿ë!
  • Menu/MenuButton - ¸Þ´º¸¸µé±â
  • Scale/Scrollbar - À§Ä¡ ³ªÅ¸³»±â
Frame ´Ù¸¥ À§Á¬µéÀ» ±×·ìÈ­Çϴµ¥ »ç¿ëµÇ´Â ÀÏÁ¾ÀÇ À§Á¬. ¶§·Î ÇÁ·¹ÀÓÀº Àüü À©µµ¿ì¸¦ ³ªÅ¸³»´Âµ¥ »ç¿ëµÈ´Ù. ±×¸®°í ´õ ÀÌ»óÀÇ ÇÁ·¹ÀÓµéÀº ±× ¾È¿¡ ³»ÀåµÈ´Ù.
Layout ÄÜÆ®·ÑÀº ÇÁ·¹ÀӾȿ¡¼­ Ưº°ÇÑ ÇüÅÂÀÇ Á¶°¨µµ¿¡ ¸ÂÃß¾î ÇÁ·¹ÀÓ ¾È¿¡¼­ ¹Ì¸®º¸±âµÈ´Ù. ¹Ì¸®º¸±â´Â ¼ö¸¹Àº ¹æ½ÄÀ¸·Î ƯȭµÉ ¼ö Àִµ¥, Çȼ¿ ´ÜÀ§·Î ÁöÁ¤µÈ ½ºÅ©¸° ÁÂÇ¥°è¸¦ ÀÌ¿ëÇϰųª, ´Ù¸¥ ÄÞÆ÷³ÍÆ®¿¡ ´ëÇÏ¿© »ó´ë ÁÂÇ¥¸¦(¿ÞÂÊ, À§ÂÊ µîµî) ÀÌ¿ëÇϰųª ȤÀº ±×¸®µå¿Í Å×À̺í Á¤·ÄÀ» »ç¿ëÇϱ⵵ ÇÑ´Ù. ÁÂÇ¥½Ã½ºÅÛÀº ÀÌÇØÇϱⰡ ½¬¿ì³ª À©µµ¿ìÀÇ Å©±â¸¦ º¯°æÇÒ ¶§ µîµî¿¡´Â ´Ù·ç±â°¡ ¾î·Æ´Ù. Ãʺ¸ÀÚµéÀº ÁÂÇ¥°è¿¡ ±âÃÊÇÑ ¹Ì¸®º¸±â ÇüÅÂ¿Í ÀÛ¾÷ÇÑ´Ù¸é Å©±â°íÁ¤ À©µµ¿ì¸¦ »ç¿ëÇϱ⸦ ±ÇÀåÇÑ´Ù.
Child ±¸ÀÌ ¾îÇø®ÄÉÀ̼ǵéÀº À§Á¬/ÄÜÆ®·Ñ ÀÇ °èÃþ±¸Á¶·Î ±¸¼ºµÇ´Â °æÇâÀÌ ÀÖ´Ù. ¾îÇø®ÄÉÀÌ¼Ç À©µµ¿ì¸¦ ±¸¼ºÇÏ´Â ÃÖ»óÀ§ ÇÁ·¹ÀÓÀº ÇϺΠÇÁ·¹ÀÓÀ» Æ÷ÇÔÇϴµ¥ ±×°ÍÀº À̹ø¿¡´Â ´õ ¸¹Àº ÇÁ·¹ÀÓ È¤Àº ÄÜÆ®·ÑµéÀ» ¿ª½Ã Æ÷ÇÔÇÒ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÄÜÆ®·ÑµéÀº ³ª¹« ±¸Á¶·Î ½Ã°¢È­ µÉ ¼ö ÀÖ´Ù. ³ª¹« ±¸Á¶ÀÇ °¢°¢ÀÇ ÄÜÆ®·ÑµéÀº ÇÑ°³ÀÇ ºÎ¸ð¿Í ¸¹Àº ¼öÀÇ ÀÚ¼ÕµéÀ» °¡Áø´Ù. »ç½Ç ÀÌ·± ±¸Á¶°¡ ¸í½ÃÀûÀ¸·Î À§Á¬¿¡ ÀÇÇؼ­ ÀúÀåµÇ´Â °ÍÀº ÀϹÝÀûÀÌ´Ù ±×·¡¼­ ÇÁ·Î±×·¡¸Ó, ȤÀº ´õ¿í ÈçÇÏ°Ô ±¸ÀÌ È¯°æ ÀÚü°¡ ÀÚÁÖ ÄÜÆ®·Ñ°ú ±×ÀÇ ¸ðµç Àڼյ鿡 ¾î¶² ÀϹÝÀûÀÎ ÇàÀ§¸¦ ¼öÇàÇÒ ¼ö ÀÖ´Ù.

ÀϹÝÀûÀÎ À§Á¬µéÀ» ±¸°æÇϱâ

ÀÌ ¼½¼Ç¿¡¼­ ¿ì¸®´Â ÆÄÀ̽ãÀÇ ´ëÈ­ ÇÁ·ÒÇÁÆ®¸¦ »ç¿ëÇÏ¿© ¾à°£ÀÇ °£´ÜÇÑ À©µµ¿ì¿Í À§Á¬À» ÀÛ¼ºÇÒ °ÍÀÌ´Ù. IDLE´Â ÀÚü°¡ Tkinter ¾îÇø®ÄÉÀ̼ÇÀ̹ǷΠ¿©·¯ºÐÀº IDLE¾È¿¡¼­´Â ¾ÈÁ¤ÀûÀ¸·Î TkinterÀ» ½ÇÇàÇÒ ¼ö´Â ¾ø´Ù´Â °ÍÀ» ÁÖÀÇÇ϶ó. ¿©·¯ºÐÀº ¹°·Ð IDLEÀ» ÆíÁý±â·Î »ç¿ëÇÏ¿© ±× ÆÄÀÏÀ» ÀÛ¼ºÇÒ ¼ö ÀÖÀ¸³ª ¿©·¯ºÐÀº ±×°ÍÀ» ¿î¿µÃ¼Á¦ ¸í·É¾î ÇÁ·ÒÇÁÆ®·ÎºÎÅÍ ½ÇÇà½ÃÄѾ߸¸ ÇÑ´Ù. ÆÄÀ̽ãÀ© »ç¿ëÀÚ´Â ÆÄÀ̽ãÀ©ÀÌ ÀڽŸ¸ÀÇ ±¸ÀÌ ÅøŶ(MFC)À» »ç¿ëÇÏ¿© ¸¸µé¾î Á³À¸¹Ç·Î Tkinter ¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ ÆÄÀ̽ãÀ© ¾È¿¡¼­Á¶Â÷ Tkinter ¾îÇø®ÄÉÀ̼ǿ¡´Â ¾î¶² ¿¹»óÄ¡ ¸øÇÑ ÇàÀ§°¡ ÀÖ´Ù. °á°úÀûÀ¸·Î ³ª´Â ¿î¿µÃ¼Á¦·ÎºÎÅÍ ¼ø¼öÇÑ ÆÄÀ̽ã ÇÁ·ÒÇÁÆ®¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.

>>> from Tkinter import *

ÀÌ°ÍÀº ¸ðµç Tkinetr ÇÁ·Î±×·¥ÀÇ Ã¹ ¹ø° ÇʼöÁ¶°ÇÀÌ´Ù - À§Á¬ÀÇ À̸§À» ¼öÀÔÇϱ⠹°·Ð ¿©·¯ºÐÀº ´Ü¼øÈ÷ ÇÊ¿äÇÑ ¸ðµâ¸¸ ¼öÀÔÇÒ ¼ö ÀÖ¾ú°ÚÀ¸³ª ¸ðµç ÄÄÆ÷³ÍÆ® À̸§ ¾Õ¿¡ Tkinter¸¦ ŸÀÌÇÁÇϸé Áï°¢ Áö°Ü¿öÁø´Ù.

>>> top = Tk()

ÀÌ°ÍÀº ¿ì¸®ÀÇ À§Á¬ °èÃþµµ¿¡¼­ ÃÖ»óÀ§ À§Á¬À» »ý¼ºÇÑ´Ù. ¸ðµç ´Ù¸¥ À§Á¬Àº ÀÌ°ÍÀÇ ÀÚ¼ÕÀ¸·Î »ý¼ºµÉ °ÍÀÌ´Ù. »õ·Î¿î °ø¹é À©µµ¿ì°¡ ¿Ïº®ÇÏ°Ô ºó ŸÀÌƲ ¹Ù¿Í Æò»ó½ÃÀÇ ÄÜÆ®·Ñ ¹öÆ°ÀÇ ¼¼Æ®(ÃÖ´ë, ÃÖ¼ÒÈ­ ¹öÆ° µîµî)¸¦ °¡Áö°í ³ªÅ¸³µÀ½À» ÁÖ¸ñÇ϶ó. ¿ì¸®´Â ÀÌÁ¦ ÄÞÆ÷³ÍÆ®¸¦ ÀÌ À©µµ¿ì¿¡ ºÙ¿©¼­ ¾îÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÒ °ÍÀÌ´Ù.

>>> dir(top)

['_tclCommands', 'children', 'master', 'tk']

dir ÇÔ¼ö·Î ¿ì¸®´Â Àμö°¡ ¾Ë°í ÀÖ´Â À̸§µéÀÌ ¹«¾ùÀÎÁö º¼ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº ±×°ÍÀ» ¸ðµâ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù ±×·¯³ª ÀÌ°æ¿ì¿¡ ¿ì¸®´Â Tk Ŭ·¡½ºÀÇ ½ÇüÁßÀÇ ÇϳªÀÎ, top °´Ã¼ÀÇ ³»ºÎ»óȲµéÀ» »ìÆ캼 °ÍÀÌ´Ù. À̰͵éÀº topÀÇ ¼Ó¼ºµéÀ̸ç, ƯÈ÷³ª children °ú parent ÀÇ ¼Ó¼º°ªÀ» ÁÖ¸ñÇ϶ó. ±×°ÍµéÀº À§Á¬ °èÃþµµ¿¡ ´ëÇÑ ¸µÅ©µéÀÌ´Ù. ¶ÇÇÑ ÁÖ¸ñÇ϶ó. _tclCommands ¼Ó¼º, ÀÌ°ÍÀº ¿©·¯ºÐÀÌ ±â¾ïÇϵíÀÌ, Tkinter°¡ Tk¶ó ºÒ¸®¿ì´Â TclÅøŶÀ§¿¡ ±¸ÃàµÇ¾ú±â ¶§¹®ÀÌ´Ù.

>>> F = Frame(top)

FrameÀ§Á¬À» ¸¸µç´Ù. ±×°ÍÀº À̹ø¿¡´Â ¿ì¸®°¡ »ç¿ëÇÒ ÀÚ¼Õ ÄÜÆ®·Ñ/À§Á¬À» ´ã°Ô µÉ °ÍÀÌ´Ù. FrameÀº topÀ» (ÀÌ°æ¿ì¿¡´Â À¯ÀÏÇÑ) ÀÚ½ÅÀÇ Ã¹¹ø° ¸Å°³º¯¼ö·Î ÁöÁ¤ÇÑ´Ù. ±×·¸°ÔÇÏ¿© F´Â topÀÇ ÀÚ¼ÕÀ§Á¬ÀÌ µÉ °ÍÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù.

>>>F.pack()

Tk À©µµ¿ì°¡ ÀÌÁ¦´Â Ãß°¡µÈ ÇÁ·¹ÀÓ À§Á¬ÀÇ Å©±â ¸¸Å­ ÁÙ¾îµç °ÍÀ» ÁÖ¸ñÇ϶ó - ±×°ÍÀº ÇöÀç·Î´Â ºñ¾îÀ־ À©µµ¿ì°¡ Áö±ÝÀº ¾ÆÁÖ ÀÛ´Ù! pack()¸Þ½îµå´Â packer(Æ÷ÀåÀÚ) ¶ó°í ¾Ë·ÁÁø Á¶°¨ °ü¸®ÀÚLayout Manager¿¡ ¿äûÇÑ´Ù. ±×°ÍÀº ½¬¿î ¹Ì¸®º¸±â¿¡´Â »ç¿ëÇϱ⠽¬¿ì³ª Á» ´õ º¹ÀâÇÏ°Ô µÇ¸é ¾à°£Àº ¾î»öÇÏ´Ù. ¿ì¸®´Â Áö±ÝÀ¸·Î¼­´Â »ç¿ëÇϱ⠽¬¿ì¹Ç·Î ±×°ÍÀ» °í¼öÇÒ °ÍÀÌ´Ù. ÁÖ¸ñÇÒ °ÍÀº À§Á¬Àº ¿ì¸®ÀÇ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ¿ì¸®°¡ ±×°ÍÀ» Æ÷ÀåÇϱâÀü±îÁö´Â (ȤÀº ´Ù¸¥ ¹Ì¸®º¸±â °ü¸®ÀÚ ¸Þ½îµå¸¦ »ç¿ëÇϱâ Àü±îÁö´Â) º¸¿©ÁöÁö ¾ÊÀ» °ÍÀ̶ó´Â °ÍÀÌ´Ù.

>>>lHello = Label(F, text="Hello world")

¿©±â¿¡ ¿ì¸®´Â »õ·Î¿î°´Ã¼ lHello¸¦ ¸¸µç´Ù. ¶óº§ Ŭ·¡½ºÀÇ ½Çü, ºÎ¸ð À§Á¬ F¿Í ÅؽºÆ®text ¼Ó¼ºÀ¸·Î "Hello world"¸¦ °¡Áø´Ù. ÁÖ¸ñÇÒ °ÍÀº Tkinter °´Ã¼ ±¸¼ºÀÚ°¡ ¸¹Àº ¸Å°³º¯¼ö¸¦ °¡Áö´Â °æÇâÀÌ ÀÖÀ¸¹Ç·Î ( °¢°¢Àº ±âº» °ªµéÀ» °¡Áø´Ù) Tkiner °´Ã¼¿¡ Àμö¸¦ ³Ñ°ÜÁÖ´Â, À̸§Áö¾îÁø ¸Å°³º¯¼ö Å×Å©´ÐÀ» »ç¿ëÇÏ´Â °ÍÀº ÀϹÝÀûÀÎ ÀÏÀÌ´Ù. ¶ÇÇÑ ±× °´Ã¼´Â ¿ì¸®°¡ ¾ÆÁ÷ ±×°ÍÀ» Æ÷ÀåÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î º¸¿©ÁöÁö ¾ÊÀ½À» ÁÖ¸ñÇ϶ó.

ÁÖ¸ñÇؾßÇÒ ¸¶Áö¸· ¿äÁ¡ Çϳª´Â À̸§Áþ±â °ü·ÊÀÇ »ç¿ë¹ýÀÌ´Ù: ³ª´Â ¶óº§¿¡´Â, À̸§ Hello ¾Õ¿¡ ¼Ò¹®ÀÚ lÀ» ºÙÀ̴µ¥, ±×°ÍÀ¸·Î ³ª´Â ±×°ÍÀÇ ¸ñÀûÀÌ »ý°¢³ª±â ¶§¹®ÀÌ´Ù. ´ëºÎºÐÀÇ À̸§Áþ±â °ü·Ê¿Í ¸¶Âù°¡Áö·Î ÀÌ°ÍÀº °³ÀÎÀûÀÎ ¼±ÅÃÀÇ ¹®Á¦ÀÌ´Ù, ±×·¯³ª ³ª´Â ±×°ÍÀÌ µµ¿òÀÌ µÈ´Ù°í »ý°¢ÇÑ´Ù.

>>>lHello.pack()

ÀÌÁ¦ ¿ì¸®´Â ±×°ÍÀ» º¼ ¼ö ÀÖ´Ù. °¡½¿¹÷Â÷°Ôµµ ¿©·¯ºÐÀÇ °ÍÀº ´ÙÀ½°ú ¸Å¿ì ºñ½ÁÇÏ°Ô º¸ÀÏ °ÍÀÌ´Ù:

Window with Label

¿ì¸®´Â ¶óº§ÀÇ ´Ù¸¥ ¼Ó¼ºµéÀ», ¿¹¸¦ µé¾î ±ÛÀÚü¿Í »ö±òµéÀ», °´Ã¼ ±¸¼ºÀÚ¿¡°Ô º¸³»´Â ¸Å°³º¯¼öµéÀ» »ç¿ëÇÏ¿© ¿ª½Ã ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿ì¸®´Â ¶ÇÇÑ Tkinter À§Á¬ÀÇ configure ¸Þ½îµå¸¦ »ç¿ëÇÏ¿© »óÀÀÇÏ´Â ¼Ó¼ºµé¿¡ ´ÙÀ½°ú °°ÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Ù:

>>> lHello.configure(text="Goodbye")

¸Þ½ÃÁö°¡ º¯°æµÇ¾ú´Ù. ½¬¿îÀÏÀÌÁö¿ä, ±×·¸Áö¿ä?? configure ´Â ¿©·¯ºÐÀÌ ´ÙÁß ¼Ó¼ºÀ» ÇÑ ¹ø¿¡ º¯°æÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é Ưº°È÷ ÁÁÀº Å×Å©´ÐÀ̼­ ±×°ÍµéÀº ¸ðµÎ Àμö·Î º¸³»¾îÁú ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ ¿©·¯ºÐÀÌ ´ÜÁö ÇÑ ¹ø¿¡ ÇÑ °³ÀÇ °ª¸¸À» º¯°æÇϱ⸦ ¿øÇÑ´Ù¸é , ¿ì¸®°¡ À§¿¡ ÇÑ ¹Ù¿Í °°ÀÌ ¿©·¯ºÐÀº ±× °´Ã¼¸¦ Àü°ú °°ÀÌ »çÀüÀ¸·Î Ãë±ÞÇÒ ¼ö ÀÖ´Ù. ±×¸®ÇÏ¿©:

>>> lHello['text'] = "Hello again"

¾î¶² °ÍÀÌ ´õ ª°í ³íÀÇÇÒ ¹Ù ¾øÀÌ ÀÌÇØÇϱ⿡ ´õ ½¬¿î°¡.

Labels Àº ¸Å¿ì Áö·çÇÑ À§Á¬ÀÌ´Ù. ±×°ÍµéÀº ´Ù¾çÇÑ »ö±ò, ±ÛÀÚü ±×¸®°í Å©±â·Î Ãâ·ÂÇÔ¿¡µµ ºÒ±¸ÇÏ°í, ½ÇÁ¦·Î Àбâ-Àü¿ë ÅؽºÆ®¸¸À» Ãâ·ÂÇÑ´Ù. (»ç½Ç ±×°ÍµéÀº ´Ü¼øÇÑ ±×·¡ÇÈÀ» Ãâ·ÂÇϴµ¥¿¡µµ »ç¿ëµÇ¾î Áú ¼ö ÀÖ´Ù. ±×·¯³ª ³ª´Â ¿©·¯ºÐ¿¡°Ô ±×·¸°Ô ÇÏ´Â °ÍÀ» ³ªÁß¿¡ º¸¿© ÁÖ°Ú´Ù)

¿ì¸®°¡ ¶Ç ´Ù¸¥ °´Ã¼ÇüÀ» »ìÆ캸±â Àü¿¡ ÇؾßÇÒ ÇÑ °¡Áö°¡ ÀÖ´Ù ±×¸®°í ±×°ÍÀº À©µµ¿ìÀÇ Å¸ÀÌƲÀ» ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù. ¿ì¸®´Â ÃÖ»óÀ§ ¼öÁØÀÇ À§Á¬ÀÎ topÀÇ ¸Þ½îµå¸¦ »ç¿ëÇÏ¿© ŸÀÌƲÀ» ¼³Á¤ÇÑ´Ù:

>>> F.master.title("Hello")

¿ì¸®´Â top À» Á÷Á¢ÀûÀ¸·Î »ç¿ëÇÒ ¼öµµ ÀÖ¾úÀ¸³ª, ¿ì¸®°¡ ³ªÁß¿¡ º¸°Ô µÇµíÀÌ ÇÁ·¹ÀÓÀÇ master ¼Ó¼ºÀ» ÅëÇÏ¿© Á¢±ÙÇÏ´Â °ÍÀº À¯¿ëÇÑ Å×Å©´ÐÀÌ´Ù.

>>> bQuit = Button(F, text="Quit", command=F.quit)

¿©±â¿¡ ¿ì¸®´Â »õ·Î¿î À§Á¬ ¹öÆ° Çϳª¸¦ »ý¼ºÇÑ´Ù. ±× ¹öÆ°Àº "Quit"À̶ó´Â ¶óº§À» °¡Áö°í ÀÖÀ¸¸ç F.quit¸í·É¾î¿Í ¿¬°üµÇ¾î ÀÖ´Ù. ¿ì¸®°¡ ±× ¸Þ½îµå À̸§À» ³Ñ°ÜÁØ°ÍÀ» ÁÖ¸ñÇ϶ó, ¿ì¸®´Â ±× ¸Þ½îµå¸¦ ±× µÚ¿¡ °ýÈ£¸¦ ºÎ°¡ÇÔÀ¸·Î½á È£ÃâÇÏÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº ¿ì¸®°¡ ÆÄÀ̽ãÀÇ °üÁ¡¿¡¼­ ¹Ýµå½Ã ÇÔ¼ö °´Ã¼¸¦ ³Ñ°ÜÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇϸç, ¿©±â¿¡¼­¿Í °°ÀÌ, Tkinter¿¡ ÀÇÇÏ¿© Á¦°øµÇ´Â ³»Àå ¸Þ½îµåÀÏ ¼öµµ ÀÖÀ¸¸ç, ȤÀº ¿ì¸®°¡ Á¤ÀÇÇÑ ´Ù¸¥ ¾î¶² ÇÔ¼öÀÏ ¼öµµ ÀÖ´Ù. ±× ÇÔ¼ö ȤÀº ¸Þ½îµå´Â ¾Æ¹«·± Àμöµµ °®Áö ¸»¾Æ¾ß ÇÑ´Ù. quit¸Þ½îµå´Â, pack¸Þ½îµå¿Í ¸¶Âù°¡Áö·Î, ±âº»Å¬·¡½º¿¡¼­ Á¤ÀÇµÇ¸ç ±×¸®°í ¸ðµç Tkinter À§Á¬¿¡ »ó¼ÓµÈ´Ù.

>>>bQuit.pack()

¶Ç ´Ù½Ã pack ¸Þ½îµå´Â ±× ¹öÆ°À» º¸ÀÌ°Ô ¸¸µç´Ù.

>>>top.mainloop()

¿ì¸®´Â Tkinter »ç°Ç ȸµ¹À̸¦ ½ÃÀÛÇÑ´Ù. ÆÄÀ̽ãÀÇ >>> ÇÁ·ÒÇÁÆ®´Â ÀÌÁ¦ »ç¶óÁø´Ù´Â °ÍÀ» ÁÖ¸ñÇ϶ó. ±×°ÍÀ¸·Î ¿ì¸®´Â ÀÌÁ¦ Tkinter °¡ Á¦¾î±ÇÀ» °¡Áø´Ù´Â °ÍÀ» ¾È´Ù. ¿©·¯ºÐÀÌ Quit ¹öÆ°À» ´©¸¥´Ù¸é ÇÁ·ÒÇÁÆ®´Â µ¹¾Æ¿Í¼­, ¿ì¸®ÀÇ ¸í·É¾î command ¼±ÅûçÇ×ÀÌ ÀÛµ¿ÇÑ´Ù´Â °ÍÀ» Áõ¸íÇØÁÙ °ÍÀÌ´Ù.

ÁÖÀÇÇÒ °ÍÀº ¸¸¾à ÀÌ°ÍÀ» ÆÄÀ̽ãÀ©À̳ª IDLEÀ¸·ÎºÎÅÍ ½ÇÇàÇÑ´Ù¸é ¿©·¯ºÐÀº ´Ù¸¥ °á°ú¸¦ ¾ò°Ô µÉÁöµµ ¸ð¸¥´Ù´Â °ÍÀÌ´Ù. ¸¸¾à ±×·¸´Ù¸é Áö±Ý±îÁöÀÇ ¸í·É¾îµéÀ» ÆÄÀ̽㠽ºÅ©¸³Æ®·Î ŸÀÌÇÁÇØ ³Ö°í¼­ ±×°ÍÀ» ¿î¿µÁ¦Á¦ÀÇ ¸í·É¾î ÇÁ·ÒÇÁÆ®·ÎºÎÅÍ ½ÇÇàÇ϶ó.

»ç½Ç ±×·± ½Ãµµ¸¦ ÇÏ´Â °ÍÀº ¾î·µç ÁÁÀº ±âȸÀÌ´Ù, °á±¹ ±×°ÍÀº ´ëºÎºÐÀÇ Tkinter ÇÁ·Î±×·¥ÀÌ ½ÇÁ¦·Î ½ÇÇàµÇ´Â ¹æ¹ýÀÌ´Ù. ¿ì¸®°¡ Áö±Ý±îÁö ³íÀÇ ÇØ¿Â °Íµé·ÎºÎÅÍ ´ÙÀ½°ú °°ÀÌ ÁÖ¿ä ¸í·É¾îµéÀ» »ç¿ëÇ϶ó:

from Tkinter import *

# set up the window itself
top = Tk()
F = Frame(top)
F.pack()

# add the widgets
lHello = Label(F, text="Hello")
lHello.pack()
bQuit = Button(F, text="Quit", command=F.quit)
bQuit.pack()

# set the loop running
top.mainloop()

top.mainloop¸Þ½îµå¸¦ È£ÃâÇÔÀ¸·Î½á »ç°ÇÀ» »ý¼ºÇÏ´Â TkinterÀÇ »ç°Ç ȸµ¹À̸¦ ½ÃÀÛÇÑ´Ù. ÀÌ°æ¿ì¿¡ ³ªÆ÷µÇ´Â À¯ÀÏÇÑ »ç°ÇÀº F.quit ¸Þ½îµå¿Í ¿¬°áµÈ ¹öÆ° ´©¸§ »ç°ÇÀÌ µÉ °ÍÀÌ´Ù. F.quit´Â À̹ø¿¡´Â ±× ¾îÇÃÀÌÄÉÀ̼ÇÀ» Á¾·á½Ãų °ÍÀÌ´Ù. ½ÃµµÇØ º¸¶ó, ±×°ÍÀº ´ÙÀ½°ú °°Àº ÇüÅ·Πº¸ÀÏ °ÍÀÌ´Ù:

Label with Button

¹Ì¸®º¸±â¸¦ ŽÇèÇϱâ

ÁÖ ÀÇ: ÆÄÀ̽ãÀÇ >>> ÇÁ·ÒÇÁÆ®¸¦ ¶°³ª¼­, Áö±ÝºÎÅÍ´Â ÆÄÀ̽㠽ºÆ®¸³Æ® ÆÄÀϾȿ¡¼­ÀÇ ¿¹Á¦¸¦ ³ª´Â Á¦°øÇÒ °ÍÀÌ´Ù.

ÀÌ ¼½¼Ç¿¡¼­ ³ª´Â À©µµ¿ì ¾È¿¡¼­ ¾î¶»°Ô Tkinter°¡ À§Á¬ÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÏ´ÂÁö »ìÆ캸°íÀÚ ÇÑ´Ù. ¿ì¸®´Â ÀÌ¹Ì ÇÁ·¹ÀÓ, ¶óº§ ±×¸®°í ¹öÆ° À§Á¬À» º¸¾ÒÀ¸¸ç ±×·± °ÍµéÀº ÀÌ ¼½¼Ç¿¡¼­ ¿ì¸®°¡ ÇÊ¿äÇÑ ¸ðµç °ÍÀÌ´Ù. ÀÌÀüÀÇ ¿¹¿¡¼­ ¿ì¸®´Â ±× À§Á¬ÀÇ pack¸Þ½îµå¸¦ »ç¿ëÇÏ¿© ±×ÀÇ ºÎ¸ð À§Á¬¾È¿¡¼­ ±×°ÍÀÇ À§Ä¡¸¦ ÁöÁ¤Çß´Ù. ±â¼úÀûÀ¸·Î ¸»Çؼ­ ¿ì¸®°¡ ÇÏ°í ÀÖ´Â °ÍµéÀº TkÀÇ Æ÷ÀåÀÚÀÎ packÀ» È£ÃâÇÏ´Â °ÍÀÌ´Ù. Á¶°¨ °ü¸®ÀÚÀÇ ÀÏÀº ÇÁ·Î±×·¡¸Ó°¡ Á¦°øÇÏ´Â ÈùÆ®µé°ú ±×¸®°í »ç¿ëÀÚ¿¡ ÀÇÇؼ­ À©µµ¿ìÀÇ Å©±â°¡ Á¦¾îµÉ ¶§¿Í °°Àº ÅëÁ¦¿¡ ±âÃÊÇÏ¿© À§Á¬µéÀÇ ÃÖ¼±ÀÇ Á¶°¨µµ¸¦ °áÁ¤ÇÏ´Â °ÍÀÌ´Ù. ¾î¶² Á¶°¨ °ü¸®ÀÚ´Â À©µµ¿ì ¾È¿¡¼­, º¸Åë Çȼ¿´ÜÀ§·Î, Á¤È®ÇÑ À§Ä¡¸¦ »ç¿ëÇϴµ¥, ÀÌ°ÍÀº ºñÁÖ¾ó º£ÀÌÁ÷°ú °°Àº ¸¶ÀÌÅ©·Î ¼ÒÇÁÆ® ȯ°æ¿¡¼­´Â ´ë´ÜÈ÷ ÀϹÝÀûÀÌ´Ù. Tkinter´Â Placer¶ó´Â Á¶°¨ °ü¸®ÀÚ¸¦ Æ÷ÇÔÇÏ°í Àִµ¥ ÀÌ°ÍÀº place ¸Þ½îµå¸¦ ÅëÇÏ¿© ¿ª½Ã À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ³ª´Â ÀÌ Áöħ¼­¿¡¼­ ±×°ÍÀ» »ìÆ캸Áö´Â ¾Ê°Ú´Ù. ¿Ö³ÄÇÏ¸é º¸Åë ´Ù¸¥ °Íµé ÁßÀÇ Çϳª, ´õ¿í Áö´ÉÀûÀÎ °ü¸®ÀÚÁßÀÇ Çϳª°¡ ´õ ÁÁÀº ¼±ÅÃÀ̱⠶§¹®Àε¥, À©µµ¿ì°¡ Å©±â°¡ º¯ÇÒ¶§ ¹«½¼ÀÏÀÌ ÀϾ´ÂÁö¿¡ °üÇÑ °ÆÁ¤À» ÇÁ·Î±×·¡¸ÓÀÎ ¿ì¸®·ÎºÎÅÍ °¡Á®°¡ ´ë½ÅÇØ Áֱ⠶§¹®ÀÌ´Ù.

Tkinter¿¡¼­ °¡Àå ´Ü¼øÇÑ Á¶°¨ °ü¸®ÀÚ´Â ¿ì¸®°¡ »ç¿ëÇØ¿Â packer(Æ÷ÀåÀÚ) ÀÌ´Ù. ±âº»ÀûÀ¸·Î, packer(Æ÷ÀåÀÚ)´Â ´ÜÁö À§Á¬µéÀ» ´Ù¸¥ À§Á¬À§¿¡ ÇÑ °³¾¿ ½×¾Æ ³õ´Â´Ù. ±×°ÍÀº Á¤»óÀûÀÎ À§Á¬À» À§ÇÏ¿©´Â ¿ì¸®°¡ º°·Î ¿øÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. ±×·¯³ª ¿ì¸®°¡ ÇÁ·¹ÀÓÀ¸·Î ºÎÅÍ ¿ì¸®ÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇϱ⸦ ¿øÇÑ´Ù¸é ±×·¯¸é °¢°¢ÀÇ À§¿¡ ÇÁ·¹ÀÓÀ» ½×´Â °ÍÀº ´ë´ÜÈ÷ À̼ºÀûÀÎ Á¢±Ù¹ýÀÌ´Ù. ±×·¯¸é ¿ì¸®´Â Æ÷ÀåÀÚ È¤Àº ´Ù¸¥ Á¶°¨ °ü¸®ÀÚ¸¦ °¢°¢ÀÇ ÇÁ·¹ÀÓ ¾È¿¡¼­ ÀûÀýÇÏ°Ô »ç¿ëÇÏ¿© ´Ù¸¥ À§Á¬µéÀ» ³»º¸³»¾î ÇÁ·¹ÀÓµé·Î Áý¾î ³ÖÀ» ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº ÀÌ°ÍÀÇ ¿¹Á¦°¡ ½ÇÇàµÇ´Â °ÍÀ» »ç·Ê ¿¬±¸ÀÇ ÁÖÁ¦Àå¿¡¼­ º¼ ¼ö ÀÖ´Ù.

±×·¸Áö¸¸ °£´ÜÇÑ Æ÷ÀåÀÚÁ¶Â÷µµ ¼ö¸¹Àº ¼±ÅûçÇ×À» Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î ¿ì¸®´Â ¿ì¸®ÀÇ À§Á¬À» ¼öÁ÷´ë½Å¿¡ ¼öÆòÀ¸·Î side Àμö¸¦ Á¦°øÇÔÀ¸·Î½á Á¤·ÄÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ:

lHello.pack(side="left")
bQuit.pack(side="left")

ÀÌ°ÍÀº À§Á¬µéÀ» °­Á¦·Î ¿ÞÂÊÀ¸·Î °¡µµ·Ï ÇÑ´Ù ±×·¸°Ô ù ¹ø° À§Á¬(¶óº§)Àº °¡Àå ¿ÞÂÊ¿¡ ³ªÅ¸³¯ °ÍÀ̸ç, ¿¬À̾ ´ÙÀ½ À§Á¬(¹öÆ°)ÀÌ µû¶ó¿Ã °ÍÀÌ´Ù. ¸¸¾à ¿©·¯ºÐÀÌ À§ÀÇ ¿¹Á¦¿¡ ÀÖ´Â ¶óÀεéÀ» º¯°æÇÏ¸é ±×°ÍÀº ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °ÍÀÌ´Ù:

Left packed widgets

±×¸®°í ¿©·¯ºÐÀÌ "left"¸¦ "right"·Î º¯°æÇÏ¸é ¶óº§Àº °¡Àå ¿ìÃø¿¡ ±×¸®°í ¹öÆ°Àº ±×°ÍÀÇ ¿ÞÂÊ¿¡ ³ªÅ¸³­´Ù, ´ÙÀ½°ú °°ÀÌ:

Right packed widgets

¿©·¯ºÐÀÌ ÁÖÀÇÇÒ ÇÑ °¡Áö´Â ±×°ÍÀÌ º°·Î ¸ð¾ç»õ°¡ ÁÁÁö ¾Ê´Ù´Â °ÍÀÌ´Ù ¿Ö³ÄÇϸé À§Á¬µéÀÌ ÇÔ²² ¸ô·Á Àֱ⠶§¹®ÀÌ´Ù. Æ÷ÀåÀÚ´Â ¶ÇÇÑ ÀÌ°ÍÀ» ´Ù·ç´Â ¾î¶² ¸Å°³º¯¼öµéÀ» ¿ì¸®¿¡°Ô Á¦°øÇÑ´Ù. »ç¿ëÇϱ⿡ °¡Àå ½¬¿î °ÍÀº PaddingÀε¥ ¼öÆò ºÙÀ̱â·Î (padx)¸¦ ¼öÁ÷ ºÙÀ̱â·Î (pady)¸¦ »ç¿ëÇÏ¿© ÁöÁ¤µÈ´Ù. ÀÌ·¯ÇÑ °ªµéÀº Çȼ¿ ´ÜÀ§·Î ÁöÁ¤µÈ´Ù. ¾à°£ÀÇ ¼öÆòºÙÀ̱⸦ ¿ì¸®ÀÇ ¿¹Á¦¿¡ Ãß°¡ÇØ º¸ÀÚ:

lHello.pack(side="left", padx=10)
bQuit.pack(side='left', padx=10)

It should look like this:

Horizontal padding

¿©·¯ºÐÀÌ ±× À©µµ¿ìÀÇ Å©±â¸¦ Àç Á¶Á¤ÇÏ·Á°í ÇÏ¸é ¿©·¯ºÐÀº ±× À§Á¬µéÀÌ ´Ù¸¥ À§Á¬°úÀÇ »ó´ëÀûÀÎ ±×µéÀÇ À§Ä¡´Â ±â¾ïÇÏÁö¸¸ À©µµ¿ìÀÇ Áß¾Ó¿¡ ¸Ó¹«´Â °ÍÀ» º¼ °ÍÀÌ´Ù. ¿Ö ±×·±°¡, ¿ì¸®°¡ ±×°ÍµéÀ» ¿ÞÂÊÀ¸·Î ¸ó´Ù¸é? ´ë´äÀº ¿ì¸®°¡ ±×°ÍµéÀ» ÇÁ·¹ÀÓÀ¸·Î ½Î ³Ö¾úÁö¸¸ ÇÁ·¹ÀÓÀº ¸ð¼­¸®°¡ ¾øÀÌ ½Î¿©Á³±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ ±×°ÍÀº À§, Áß¾Ó¿¡ À§Ä¡ÇÑ´Ù - Æ÷ÀåÀÚÀÇ ±âº»°ª. ¿©·¯ºÐÀÌ À§Á¬µéÀ» À©µµ¿ìÀÇ ¿Ã¹Ù¸¥ À§Ä¡¿¡ ¾ÈÁÖ ½ÃÅ°·Á°í ÇÑ´Ù¸é ¿©·¯ºÐÀº ±× ÇÁ·¹ÀÓÀ» Àû´çÇÑ ¸ð¼­¸®¿¡ ¿ª½Ã ½Î º¸³¾ ÇÊ¿ä°¡ ÀÖ´Ù:

F.pack(side='left')

¶ÇÇÑ ÁÖ¸ñÇÒ °ÍÀº À§Á¬µéÀº ¿©·¯ºÐÀÌ À©µµ¿ì¸¦ ¼öÁ÷À¸·Î Àç Á¶Á¤Çϸé Áß¾Ó¿¡ À§Ä¡ÇÑ´Ù - ´Ù½Ã ±×°ÍÀº Æ÷ÀåÀÚÀÇ ±âº» ¼³Á¤ ÇàÀ§À̱⠶§¹®ÀÌ´Ù.

³ª´Â ¿©·¯ºÐ¿¡°Ô padx ¿Í pady ¸¦ ½º½º·Î ´Ù·ç¾îº¸°í ¼­·Î ´Ù¸¥ °ªµé°ú Á¶ÇÕ µîµîÀÇ È¿°ú¸¦ »ìÆ캸µµ·Ï ³²°Ü µÎ°Ú´Ù. ±×°Íµé »çÀÌ¿¡, side ¿Í padx/pady°¡ Æ÷ÀåÀÚ(packer)¸¦ »ç¿ëÇÏ¿© À§Á¬ÀÇ À§Ä¡¸¦ ÁöÁ¤Çϴµ¥ »ó´çÈ÷ ¸¹Àº À¯¿¬¼ºÀ» Çã¿ëÇÑ´Ù. °Å±â¿¡´Â ´Ù¸¥ ¸î°³ÀÇ ¼±ÅûçÇ×ÀÌ À־, °¢°¢Àº ¶Ç ´Ù¸¥ ¹Ì¹¦ÇÑ ÇüÅÂÀÇ ÄÜÆ®·ÑÀ» Ãß°¡ÇØ ÁֹǷÎ, ¼¼ºÎ»çÇ×À» À§Çؼ­´Â Tkinter ÂüÁ¶ÆäÀÌÁö¸¦ Á¡°ËÇÏ¿© Áֱ⠹ٶõ´Ù.

Tkinter¿¡´Â µÎ °¡ÁöÀÇ Á¶°¨ °ü¸®ÀÚ°¡ Àִµ¥, grid ±×¸®°í placer·Î ¾Ë·ÁÁ® ÀÖ´Ù. grid °ü¸®ÀÚ¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¿©·¯ºÐÀº pack() ´ë½Å¿¡ grid()¸¦ »ç¿ëÇÏ°í (place °ü¸®ÀÚ¿¡´Â) ¿©·¯ºÐÀº pack()´ë½Å¿¡ place()¸¦ È£ÃâÇÑ´Ù. °¢ÀÚ´Â ÀڽŸ¸ÀÇ ¼±ÅûçÇ×À» °¡Áö¸ç ±×¸®°í ³ª´Â ÀÌ ¼­¹®¿¡¼­ Æ÷ÀåÀÚ¸¸À» ´Ù·ê °ÍÀ̹ǷΠ¿©·¯ºÐÀº ¼¼ºÎ»çÇ×À» À§Çؼ­´Â Tkinter Áöħ¼­¿Í ÂüÁ¶¼­¸¦ ã¾Æº¸¾Æ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÁÖ¸ñÇؾßÇÒ ÁÖ¿ä ¿äÁ¡Àº grid´Â ÄÄÆ÷³ÍÆ®¸¦ À©µµ¿ì ¾ÈÀÇ °ÝÀÚ¿¡(³î¶ó¿ò!) Á¤·ÄÇÑ´Ù. - ÀÌ°ÍÀº ¶§·Î, ¿¹¸¦ µé¸é, Á¤·ÄµÈ ÅؽºÆ® ÀÔ·Â ¹Ú½º¸¦ °¡Áö´Â ´ëÈ­»óÀÚ¿¡ À¯¿ëÇÒ ¼ö ÀÖ´Ù placer »ç¿ëÀÚ´Â Çȼ¿´ÜÀ§·Î ÁÂÇ¥°è¸¦ ¼öÁ¤Çϰųª ȤÀº À©µµ¿ì ¾È¿¡¼­ »ó´ëÀûÀÎ ÁÂÇ¥¸¦ ¼öÁ¤ÇÑ´Ù. ÈÄÀÚ´Â ÄÄÆ÷³ÍÆ®°¡ À©µµ¿ì¿¡ ¸ÂÃß¾î Å©±â°¡ º¯Çϵµ·Ï - ¿¹¸¦ µé¾î Ç×»ó ¼öÁ÷°ø°£ÀÇ 75%¸¦ Á¡À¯Çϵµ·Ï - ÇÏ¿©ÁØ´Ù. ÀÌ°ÍÀº º¹ÀâÇÑ À©µµ¿ì µðÀÚÀο¡´Â À¯¿ëÇÒ ¼ö ÀÖ´Ù ±×·¯³ª ¸¹Àº »çÀü-°èȹÀÌ ÇÊ¿äÇÏ´Ù - ³ª´Â ¸ð´«Á¾ÀÌ, ¿¬ÇÊ°ú Áö¿ì°Ô¸¦ °­·ÂÈ÷ ÃßõÇÑ´Ù!

ÇÁ·¹ÀÓ°ú Æ÷ÀåÀÚ¸¦ »ç¿ëÇÏ¿© °Ñ ¸ð½ÀÀ» Á¦¾îÇϱâ

ÇÁ·¹ÀÓ À§Á¬Àº ½ÇÁ¦·Î ¿ì¸®°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾à°£ÀÇ À¯¿ëÇÑ ¼Ó¼ºµéÀ» °¡Áö°í ÀÖ´Ù. °á±¹, ÄÄÆ÷³ÍÆ®¿¡ °üÇÏ¿© ³í¸®ÀûÀÎ ÇÁ·¹ÀÓÀ» °¡Áö´Â °ÍÀº ÁÁÀº ÀÏÀÌÁö¸¸, ¾î¶² °æ¿ì¿¡ ¿ì¸®´Â ¿ª½Ã º¼¼ö ÀÖ´Â ¾î¶² °ÍÀ» ¿øÇÑ´Ù. ÀÌ°ÍÀº ƯÈ÷³ª ¶óµð¿À ¹öÆ°À̳ª ȤÀº üũ ¹Ú½º¿Í °°Àº ±×·ìÈ­µÈ ÄÜÆ®·Ñµé¿¡ À¯¿ëÇÏ´Ù. ÇÁ·¹ÀÓÀº ´Ù¸¥ ¸¹Àº Tk À§Á¬¿¡µµ ÀϹÝÀûÀÎ, ¾ç°¢Relief¼Ó¼ºÀ» Á¦°øÇÔÀ¸·Î½á, ÀÌ ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. Relief ´Â ¾î¶² °ªµéµµ °¡Áú ¼ö ÀÖ´Ù: sunken(¿ÈÇ«ÇÑ), raised(µ¹ÃâµÈ), groove(ȨÀÌ ÆÄÀÎ), ridge(À¶±âÇÑ) ¶Ç´Â flat(³³ÀÛÇÑ).
sunken°ªÀ» ¿ì¸®ÀÇ °£´ÜÇÑ ´ëÈ­»óÀÚ¿¡ »ç¿ëÇØ º¸ÀÚ. °£´ÜÇÏ°Ô ÇÁ·¹ÀÓÀ» »ý¼ºÇÏ´Â ¶óÀÎÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇ϶ó:

 F = Frame(top,relief="sunken", border=1) 

ÁÖ ÀÇ 1: ¿©·¯ºÐÀº °æ°è¼±À» ¿ª½Ã Á¦°øÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é ÇÁ·¹ÀÓÀº ¿òÇ« µé¾î°¥ °ÍÀÌÁö¸¸ °æ°è¼±Àº º¸ÀÌÁö ¾Ê´Â´Ù - ¿©·¯ºÐÀº ÀüÇô Â÷ÀÌÁ¡À» º¼ ¼ö ¾ø´Ù!

ÁÖ ÀÇ 2:ÁÖ¸ñÇÒ °ÍÀº ¿©·¯ºÐÀÌ °æ°è¼±ÀÇ Å©±â¸¦ ÀοëºÎÈ£·Î ½ÎÁö ¾Ê¾Ò´Ù´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº Tk ÇÁ·Î±×·¡¹ÖÀÇ È¥¶õ½º·± ¸ð½ÀÀÇ Çϳª·Î ±×°ÍÀº ¾ðÁ¦ ¼±ÅûçÇ× ÁÖÀ§¿¡ ÀοëºÎÈ£¸¦ »ç¿ëÇÒÁö ±×¸®°í ¾ðÁ¦ ±× ÀοëºÎÈ£¸¦ »ý·«ÇÒÁö ¾Æ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ¸¸ÀÏ ±×°ÍÀÌ ÇÑ°³ÀÇ ¹®ÀÚ È¤Àº ¼ýÀÚ°ªÀ̶ó¸é ¿©·¯ºÐÀº ÀοëºÎÈ£¸¦ »ý·«ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ¼ýÀÚ¿Í ¹®ÀÚÀÇ È¥ÇÕÀ̰ųª ȤÀº ¹®ÀÚ¿­À̶ó¸é ¿©·¯ºÐÀº ÀοëºÎÈ£°¡ ÇÊ¿äÇÏ´Ù. ¸¶Âù°¡Áö·Î ¾î¶»°Ô ´ë¼Ò ¹®ÀÚ¸¦ »ç¿ëÇؾßÇÒÁöµµ È¥¶õ½º·´´Ù. ºÒÇàÇÏ°Ôµµ ½¬¿î ÇعýÀº ¾ø¾î¼­, ¿©·¯ºÐÀº ´ÜÁö °æÇèÀ¸·Î ¹è¿ï»ÓÀÌ´Ù - ÆÄÀ̽ãÀº ¶§¶§·Î ÀÚ½ÅÀÇ ¿¡·¯ ¸Þ½ÃÁö¿¡ À¯È¿ÇÑ ¼±ÅûçÇ×ÀÇ ¸ñ·ÏÀ» Á¦°øÇÑ´Ù!

ÁÖÀÇÇؾßÇÒ ´Ù¸¥ ÇÑ °¡Áö´Â ÇÁ·¹ÀÓÀÌ À©µµ¿ì¸¦ ä¿ìÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. ¿ì¸®´Â, ´ç¿¬È÷ fill(ä¿ì±â) À̶ó°í ºÒ¸®¿ì´Â, Æ÷ÀåÀÚÀÇ ´Ù¸¥ ¼±ÅûçÇ×À¸·Î ±× ¹®Á¦¸¦ °íÄ¥ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀÌ ±× ÇÁ·¹ÀÓÀ» Æ÷ÀåÇÒ ¶§ ´ÙÀ½°ú °°ÀÌ Ç϶ó:

F.pack(fill="x")

ÀÌ°ÍÀº ¼öÆòÀ¸·Î ä¿î´Ù, ¿©·¯ºÐÀÌ ±× ÇÁ·¹ÀÓÀÌ Àüü À©µµ¿ì¸¦ ä¿ì±â¸¦ ¿øÇÑ´Ù¸é ´ÜÁö fill='y' ¸¦ »ç¿ëÇ϶ó.

ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ ÃÖÁ¾ °á°ú´Â ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ:

Sunken Frame

´õ ¸¹Àº À§Á¬µéÀ» Ãß°¡Çϱâ

ÀÌÁ¦ ÅؽºÆ® ¿£Æ®¸®(Entry) À§Á¬À» »ìÆ캸ÀÚ. ÀÌ°ÍÀº (¿ì¸®¿¡°Ô) Ä£¼÷ÇÑ ÅؽºÆ® ÀÔ·Â ¹Ú½ºÀÇ ÇÑ°³ÀÇ ¶óÀÎÀÌ´Ù. ±×°ÍÀº ´õ Á¤¹ÐÇÑ Text(ÅؽºÆ®) À§Á¬ÀÇ ¸¹Àº ¸Þ½îµå¸¦ °øÀ¯ÇÑ´Ù. ¿ì¸®´Â ¿©±â¿¡¼­ ±×°ÍÀ» »ìÆ캸Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. Èñ¸ÁÀûÀÌ°Ôµµ ±× ¿£Æ®¸® À§Á¬ÀÇ ¸Þ½îµå¸¦ »ç¿ëÇϸé ÀÌÈÄ¿¡ ÅؽºÆ® ¹Ú½º¸¦ ½ÇÇèÇϱâ À§ÇÑ Æ°Æ°ÇÑ ±âÃʸ¦ Á¦°øÇÒ °ÍÀÌ´Ù.

¿ì¸®ÀÇ "Hello World" ÇÁ·Î±×·¥À¸·Î µ¹¾Æ°¡ ¿ì¸®´Â ÅؽºÆ® ¿£Æ®¸® À§Á¬À» ±× ÀÚ½ÅÀÇ ÇÁ·¹ÀÓ¿¡ Ãß°¡ÇÏ°í ¿ì¸®°¡ ŸÀÌÇÁÇØ ³ÖÀº ÅؽºÆ®¸¦ Áö¿ï¼ö ÀÖ´Â ¹öÆ°À» Ãß°¡ÇÒ °ÍÀÌ´Ù. ÀÌ°ÍÀº ¿£Æ®¸® À§Á¬À» »ý¼ºÇÏ°í »ç¿ëÇÏ´Â ¹ýÀ» º¸¿©ÁÙ »Ó¸¸ ¾Æ´Ï¶ó ¿ì¸®ÀÇ »ç°Ç ó¸®ÇÔ¼ö¸¦ Á¤ÀÇÇϴ¹ý°ú ±×°ÍµéÀ» À§Á¬¿¡ ¿¬°áÇÏ´Â ¹ýÀ» º¸¿©ÁØ´Ù.

from Tkinter import *

# create the event handler first
def evClear():
  eHello.delete(0,END)

# create the top level window/frame
top = Tk()
F = Frame(top)
F.pack(expand="true")

# Now the frame with text entry
fEntry = Frame(F, border="1")
eHello = Entry(fEntry)
fEntry.pack(side="top", expand="true")
eHello.pack(side="left", expand="true")

# Finally the frame with the buttons.
# We'll sink this one for emphasis
fButtons = Frame(F, relief="sunken", border=1)
bClear = Button(fButtons, text="Clear Text", command=evClear)
bClear.pack(side="left", padx=5, pady=2)
bQuit = Button(fButtons, text="Quit", command=F.quit)
bQuit.pack(side="left", padx=5, pady=2)
fButtons.pack(side="top", expand="true")

# Now run the eventloop
F.mainloop()

Çѹø ´õ ÁÖ¸ñÇÒ °ÍÀº ¿ì¸®°¡ »ç°Ç ó¸®ÀÚ(evClear)ÀÇ À̸§À» command Àμö·Î¼­ bClear ¹öÆ°¿¡ ³Ñ°ÜÁÖ¾ú´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ ÁÖ¸ñÇÒ °ÍÀº À̸§Áþ±â °ü·ÊÀÇ »ç¿ë¹ýÀ¸·Î evXXX ´Â »ç°Ç ó¸®ÀÚ¿Í ±×¿¡ »óÀÀÇÏ´Â À§Á¬À» ¿¬°á½ÃŲ´Ù´Â °ÍÀÌ´Ù.

±× ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ´ÙÀ½À» »êÃâÇÑ´Ù:

Entry and button controls

±×¸®°í ¿©·¯ºÐÀÌ ÅؽºÆ® ¿£Æ®¸® ¹Ú½º¿¡ ¹«¾ð°¡¸¦ ŸÀÌÇÁÇØ ³Ö°í¼­ "Clear Text" ¹öÆ°À» Ä£´Ù¸é ±×°ÍÀº ´Ù½Ã ³»¿ëÀ» Áö¿î´Ù.

»ç°ÇÀ» ¹­±â - À§Á¬¿¡¼­ ÄÚµå·Î

Áö±Ý±îÁö´Â ¿ì¸®´Â ¹öÆ°ÀÇ ¸í·É¾î ¼Ó¼ºÀ» »ç¿ëÇÏ¿© ÆÄÀ̽ã ÇÔ¼ö¿Í ±¸ÀÌ »ç°ÇµéÀ» ¿¬°ü½ÃÄ×´Ù. ¶§·Î´Â ¿ì¸®´Â ´õ¿í ¸í½ÃÀûÀÎ Á¦¾î¸¦, ¿¹¸¦ µé¾î Ưº°ÇÑ Å°ÀÇ Á¶ÇÕÀ» ³ªÆ÷Çϱ⸦ ¿øÇÑ´Ù. ±×·¸°Ô ÇÏ´Â ¹æ¹ýÀº bind ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î »ç°Ç°ú ÆÄÀ̽ã ÇÔ¼ö¸¦ ¹­´Â °ÍÀÌ´Ù(ȤÀº ¿«´Â´Ù)

ÀÌÁ¦ ¿ì¸®´Â À§ ¿¹Á¦¿¡ ÀÖ´Â ÅؽºÆ®¸¦ Áö¿ì±â À§ÇÑ ÇÖÅ°¸¦ Á¤ÀÇ ÇÒ °ÍÀÌ´Ù - CTRL-c ¶ó°í Çغ¸ÀÚ. ±×·¸°Ô Çϱâ À§ÇÏ¿© ¿ì¸®´Â CTRL-CÀÇ Å° Á¶ÇÕÀ» »èÁ¦ ¹öÆ°°ú °°Àº »ç°Ç ó¸®ÀÚ¿Í ¹­À» ÇÊ¿ä°¡ ÀÖ´Ù. ºÒÇàÇÏ°Ôµµ °Å±â¿¡´Â ¿¹»óÄ¡ ¸øÇÑ ¹®Á¦Á¡ÀÌ Çϳª ÀÖ´Ù. ¿ì¸®°¡ ¸í·É¾î ¼±ÅûçÇ×À» »ç¿ëÇÒ ¶§ ÁöÁ¤µÈ ÇÔ¼ö´Â ¹Ýµå½Ã ¾Æ¹«·± Àμöµµ ÃëÇÏ¸é ¾ÈµÈ´Ù. ¿ì¸®°¡ °°Àº ÀÏÀ» Çϱâ À§ÇÏ¿© bind ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ¹­±â ÇÔ¼ö´Â ¹Ýµå½Ã ÇÑ °³ÀÇ Àμö¸¦ °¡Á®¾ß¸¸ ÇÑ´Ù. ÇÑ°³ÀÇ ¸Å°³º¯¼ö¸¦ °¡Áö°í evClear¸¦ È£ÃâÇÏ´Â »õ·Î¿î ÇÔ¼ö¸¦ ¸¸µé±â À§Çؼ­ ¿ì¸®´Â ÀÌ°ÍÀÌ ÇÊ¿äÇÏ´Ù. ´ÙÀ½À» evClear Á¤ÀÇ µÚ¿¡ Ãß°¡Ç϶ó:

def evHotKey(event):
    evClear()

±×¸®°í ´ÙÀ½ÀÇ ¶óÀÎÀ» ¿£Æ®¸® À§Á¬ÀÇ ´ÙÀ½¿¡ Ãß°¡Ç϶ó:

eHello.bind("",evHotKey) # the key definition is case sensitive

±× ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇÏ¸é ¿©·¯ºÐÀº ÀÌÁ¦ ±× ÅؽºÆ®¸¦ ±× ¹öÆ°À» ´©¸£°Å³ª ȤÀº Ctrl-c¸¦ ŸÀÌÇÁÇÔÀ¸·Î½á ¾ø¾Ù ¼ö ÀÖ´Ù. ¿ì¸®´Â ¶ÇÇÑ bind¸¦ »ç¿ëÇÏ¿© ¸¶¿ì½º Ŭ¸¯ ȤÀº Æ÷Ä¿½ºÈ¹µæ(¼±ÅÃ) ȤÀº Æ÷Ä¿½º¼Õ½Ç ȤÀº ½ÉÁö¾î´Â À©µµ¿ì°¡ º¸¿©Áö°Å³ª ÇÏ´Â »ç°ÇµéÀ» ³ªÆ÷ÇÒ ¼ö ÀÖ´Ù. Tkinter ¹®¼­¸¦ »ìÆ캸°í ÀÌ°Í¿¡ °üÇÑ ´õ ¸¹Àº Á¤º¸¸¦ ¾Ë¾Æ º¸¶ó. °¡Àå Èûµç ºÎºÐÀº º¸Åë »ç°Ç ¼³¸íÀÇ Çü½ÄÀ» ÀÌÇØÇÏ´Â °ÍÀÌ´Ù!

ªÀº ¸Þ½ÃÁö

¿©·¯ºÐÀº ªÀº ¸Þ½ÃÁö¸¦ ¿©·¯ºÐÀÇ »ç¿ëÀÚ¿¡°Ô MessageBox¸¦ »ç¿ëÇÏ¿© º¸°í ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº Tk¿¡¼­ ´ë´ÜÈ÷ ½±´Ù ±×¸®°í tkMessageBox ¸ðµâÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ´ÙÀ½¿¡ º¸¿©Áö´Â ¹Ù¿Í °°ÀÌ ´Þ¼ºµÈ´Ù:

import tkMessageBox
tkMessageBox.showinfo("Window Title", "A short message")
¼­·Î ´Ù¸¥ showXXXÇÔ¼ö¸¦ ÅëÇÏ¿© ¿ª½Ã ¿¡·¯, ÁÖÀÇ, Yes/No ¹Ú½º ±×¸®°í OK/Cancel ¹Ú½º°¡ »ç¿ë°¡´ÉÇÏ´Ù. ±×°ÍµéÀº ¼­·Î ´Ù¸¥ ¾ÆÀÌÄÜ°ú ¹öÆ°À¸·Î ±¸º°µÈ´Ù. ÈÄÀÚÀÇ µÎ°³´Â showXXX ´ë½Å¿¡ askXXX¸¦ »ç¿ëÇÏ°í »ç¿ëÀÚ°¡ ¾î¶² ¹öÆ°À» ´­·¶´ÂÁö ³ªÅ¸³»´Â ÇÑ °³ÀÇ °ªÀ» ¹ÝȯÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ:
res = tMessageBox.askokcancel("Which?", "Ready to stop?")
print res

¿©±â¿¡ Tkinter ¸Þ½ÃÁö ¹Ú½ºÀÇ ¸î°¡Áö ¿¹°¡ ÀÖ´Ù:

Info box   Error box   Yes/No box

The Tcl view

¿ì¸®°¡ ÆÄÀ̽ã°ú ƼŬÀ» ÀÌ Áöħ¼­ÀÇ ÃʹݺÎÅÍ Âß ºñ±³ÇØ ¿ÔÀ¸¹Ç·Î ÃʱâÀÇ ¶óº§°ú ¹öÆ°ÀÇ ¿¹Á¦°¡ ¿ø·¡ÀÇ Tcl/Tk ÇüÅ·δ ¾î¶»°Ô º¸ÀÌ´Â Áö¸¦ ¿©·¯ºÐ¿¡°Ô º¸¿©ÁÖ´Â °ÍÀº ÀÇ¹Ì ÀÖ´Â °Í °°´Ù:

Label .lHello -text "Hello World"
Button .bHello -text Quit -command "exit"
wm title . Hello
pack .lHello .bHello

¿©·¯ºÐÀÌ º¼ ¼ö ÀÖµíÀÌ ±×°ÍÀº ´ë´ÜÈ÷ °£°áÇÏ´Ù. À§Á¬ °èÃþµµ´Â '.' À» ÃÖ»óÀ§ ¼öÁØÀÇ À§Á¬À¸·Î À̸§Áþ´Â °ü·Ê¿¡ ÀÇÇؼ­ Çü¼ºµÈ´Ù. Æò»ó½Ã´ë·Î ƼŬ¿¡¼­ À§Á¬Àº Àμö·Î ³Ñ°ÜÁö´Â ¼Ó¼ºÀ» °¡Áö´Â ¸í·É¾îÀÌ´Ù. Èñ¸ÁÀûÀÌ°Ôµµ À§Á¬ ¸Å°³º¯¼ö¸¦ ÆÄÀ̽ãÀÇ À̸§ÀÖ´Â Àμö·Î ¹ø¿ªÇÏ´Â °ÍÀº ´ë´ÜÈ÷ ½±´Ù. ÀÌ°ÍÀº ¿©·¯ºÐÀÌ Tcl/Tk ¹®¼­¸¦ (±×°Í¿¡ °üÇÑ ¹®¼­´Â ¸¹´Ù!) »ç¿ëÇÏ¿© Tkinter ÇÁ·Î±×·¡¹ÖÀ¸·Î ¹®Á¦¸¦ Ǫ´Âµ¥ µµ¿òÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ´ëºÎºÐ ±×°ÍÀÇ ¹ø¿ªÀº ½±´Ù.

¿©±â°¡ ³»°¡ Tcl/Tk·Î ÇÒ¼öÀÖ´Â ÇѵµÀÌ´Ù. ±×·¸Áö¸¸ ³¡³»±â Àü¿¡ ³ª´Â ¿©·¯ºÐ¿¡°Ô Tkinter ±¸ÀÌ ¾îÇø®ÄÉÀ̼ÇÀ» °´Ã¼·Î ½Î´Â ÀϹÝÀûÀÎ Å×Å©´ÐÀ» º¸¿© ÁÖ°Ú´Ù.

¾îÇø®ÄÉÀ̼ÇÀ» °´Ã¼·Î Æ÷ÀåÇϱâ

±¸ÀÌ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ Àüü ¾îÇø®ÄÉÀ̼ÇÀ» Ŭ·¡½º·Î ½Î´Â °ÍÀº ÈçÇÑ ÀÏÀÌ´Ù. ÀÌ°ÍÀº ¹®Á¦¸¦ Á¦±âÇϴµ¥, ¾î¶»°Ô ¿ì¸®´Â Tkinter ¾îÇø®ÄÉÀ̼ÇÀÇ À§Á¬À» ÀÌ·¯ÇÑ Å¬·¡½º ±¸Á¶¿¡ ¸ÂÃߴ°¡?
¿©±â¿¡´Â µÎ °¡ÁöÀÇ ¼±ÅÃÀÌ ÀÖ´Ù. ¿ì¸®´Â ±× ¾îÇø®ÄÉÀÌ¼Ç ÀÚü¸¦ Tkinter ÇÁ·¹ÀÓÀÇ ÇϺΠŬ·¡½º·Î ¸¸µé±â·Î °áÁ¤ÇÏ´ø°¡ ȤÀº »óÀ§ ¼öÁØÀÇ À©µµ¿ì¿¡ ´ëÇÑ ÂüÁ¶Á¡À» ÀúÀåÇÏ´Â ¸â¹öÇʵ带 °¡Áö´ø°¡ ÇÏ´Â °ÍÀÌ´Ù. ÈÄÀÚÀÇ Á¢±Ù¹ýÀº ´Ù¸¥ ÅøŶµé¿¡¼­ ´ë´ÜÈ÷ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â °ÍÀÌ´Ù. ±×·¡¼­ ¿ì¸®´Â ¿©±â¿¡¼­ ±× Á¢±Ù¹ýÀ» »ç¿ëÇÏ·Á ÇÑ´Ù. ¿©·¯ºÐÀÌ Ã¹ ¹ø° Á¢±Ù¹ýÀÌ ½ÇÇàµÇ´Â °ÍÀ» º¸·Á¸é µÚ·Î µ¹¾Æ°¡ »ç°Ç ÁÖµµÇü ÇÁ·Î±×·¡¹ÖÀÇ ÁÖÁ¦Àå¿¡ ÀÖ´Â ¿¹Á¦¸¦ »ìÆ캸¶ó. (±× ¿¹Á¦´Â ¶ÇÇÑ ³î¶ó¿ï Á¤µµ·Î ´ÙÀç´Ù´ÉÇÑ TkinterÀÇ ÅؽºÆ® À§Á¬ÀÇ ±âº»ÀûÀÎ »ç¿ë¹ýÀ» º¸¿©ÁØ´Ù.)

³ª´Â ¿£Æ®¸® Çʵ带 »ç¿ëÇÏ¿© À§ÀÇ ¿¹Á¦¸¦, »èÁ¦ ¹öÆ°°ú Á¾·á ¹öÆ°À» OO ±¸Á¶·Î, º¯°æÇÒ °ÍÀÌ´Ù. ¸ÕÀú ¿ì¸®´Â ¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½º¸¦ ÀÛ¼ºÇÑ´Ù ±×¸®°í ±¸¼ºÀÚ ¾È¿¡¼­ ±¸ÀÌÀÇ º¸¿©Áö´Â ºÎºÐµéÀ» Á¶¸³ÇÑ´Ù.

¿ì¸®´Â °á°ú·Î »ý±â´Â ÇÁ·¹ÀÓÀ» self.mainWindow¿¡ ÇÒ´çÇÑ´Ù, ±×·¸°Ô ±× Ŭ·¡½ºÀÇ ´Ù¸¥ ¸Þ½îµå°¡ »óÀ§ ¼öÁØÀÇ ÇÁ·¹ÀÓ¿¡ Á¢±ÙÇÒ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¿ì¸®°¡ Á¢±ÙÇÒ Çʿ伺ÀÌ ÀÖ´Â (¿£Æ®¸® ÇÊµå °°Àº) ´Ù¸¥ À§Á¬µéÀº ±× ÇÁ·¹ÀÓÀÇ ¸â¹ö º¯¼ö¿¡ ¸¶Âù°¡Áö·Î ÇÒ´çµÈ´Ù. ÀÌ Å×Å©´ÐÀ» »ç¿ëÇÏ¿© »ç°Ç ó¸®ÀÚ´Â ±× ¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½ºÀÇ ¸Þ½îµå°¡ µÈ´Ù. ±×¸®°í ±× ¸Þ½îµå ¸ðµÎ´Â ±× ¾îÇø®ÄÉÀ̼ÇÀÇ ´Ù¸¥ ¾î¶² µ¥ÀÌŸµµ self ÂüÁ¶¸¦ ÅëÇÏ¿© Á¢±ÙÇÑ´Ù (±×·¸Áö¸¸ ÀÌ°æ¿ì¿¡´Â ¾Æ¹«°Íµµ ¾ø´Ù). ÀÌ°ÍÀº ±¸ÀÌ¿Í ¼û¾îÀÖ´Â ¾îÇø®ÄÉÀÌ¼Ç °´Ã¼¿ÍÀÇ ºóÆ´¾ø´Â ÅëÇÕÀ» Á¦°øÇÑ´Ù:

from Tkinter import *

class ClearApp:
   def __init__(self, parent=0):
      self.mainWindow = Frame(parent)
      # Create the entry widget
      self.entry = Entry(self.mainWindow)
      self.entry.insert(0,"Hello world")
      self.entry.pack(fill=X)

      # now add the 2 buttons
      # we use a nested frame pair to give a grooved effect
      fOuter = Frame(self.mainWindow, border=1, relief="sunken")
      fButtons = Frame(fOuter, border=1, relief="raised")
      bClear = Button(fButtons, text="Clear",
                      width=8, height=1, command=self.clearText)
      bQuit = Button(fButtons, text="Quit",
                      width=8, height=1, command=self.mainWindow.quit)
      bClear.pack(side="left", padx=15, pady=1)
      bQuit.pack(side="right", padx=15, pady=1)
      fButtons.pack(fill=X)
      fOuter.pack(fill=X)
      self.mainWindow.pack()

      # set the title
      self.mainWindow.master.title("Clear")

   def clearText(self):
      self.entry.delete(0,END)

app = ClearApp()
app.mainWindow.mainloop()

¿©±â¿¡ ±× °á°ú°¡ ÀÖ´Ù:

OOP version

°á°ú´Â ÀÌÀüÀÇ ±¸Çö°ú ÇöÀúÇÏ°Ô ºñ½ÁÇÏ´Ù. ±×·¸Áö¸¸ ³ª´Â ¾Æ·¡ÀÇ ÇÁ·¹ÀÓ¿¡ º¯ÇüÀ» ÁÖ¾î ±×°ÍÀ» ¿ì¾ÆÇÑ È¨Áú·Î ¸¶°¨Çß´Ù. ³ª´Â ±× ¹öÆ°µé¿¡ ³Êºñ¸¦ Á¦°øÇÏ¿© ±×°ÍµéÀ» ¾Æ·¡ÀÇ wxPython ¿¹Á¦¿Í ´õ¿í ºñ½ÁÇÏ°Ô º¸À̵µ·Ï ¸¸µé¾ú´Ù.

¹°·Ð ¿ì¸®°¡ °´Ã¼·Î ½Ò¼ö ÀÖ´Â °ÍÀº ¾îÇø®ÄÉÀÌ¼Ç º»Ã¼¸¸Àº ¾Æ´Ï´Ù. ¿ì¸®´Â Ç¥ÁØÀûÀÎ ¹öÆ°ÀÇ ¸ðµÒÀ» ´ã°í ÀÖ´Â ÇÁ·¹ÀÓ¿¡ ±Ù°ÅÇÑ Å¬·¡½º¸¦ ¸¸µé ¼öµµ ÀÖ°í ±× Å¬·¡½º¸¦, ¿¹¸¦ µé¾î ´ëÈ­ À©µµ¿ì¸¦ ±¸ÃàÇϴµ¥¿¡ Àç »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ½ÉÁö¾î´Â Àüü ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇÒ¼öµµ À־ ±×°ÍµéÀ» ¿©·¯°³ÀÇ ÇÁ·ÎÁ§Æ®¿¡ ¹ø°¥¾Æ »ç¿ëÇÒ¼öµµ ÀÖ´Ù. ȤÀº ¿ì¸®´Â Ç¥ÁØÀûÀÎ À§Á¬µéÀ» ±×°ÍµéÀ» ÇϺΠŬ·¡½ºÈ­ÇÔÀ¸·Î½á ±× ´É·ÂÀ» È®ÀåÇÒ ¼ö ÀÖ´Ù. - ÀÚ½ÅÀÇ »óÅ¿¡ µû¶ó »ö±òÀ» º¯°æÇÏ´Â ¹öÆ°À» »ý¼ºÇϴ°Ͱú °°Àº °Í. Python Mega Widgets (PMW)°¡ ÀÌ°ÍÀ» ±¸ÃàÇØ ¿Ô´Ù. ±×°ÍÀº TkinterÀÇ È®ÀåÀÌ¸ç ¿©·¯ºÐÀº ±×°ÍÀ» ³»·Á ¹ÞÀ» ¼ö ÀÖ´Ù.

´Ù¸¥ ´ë¾È - wxPython

´Ù¸¥ ¸¹Àº ±¸ÀÌ ÅøŶÀÌ »ç¿ë°¡´ÉÇÏÁö¸¸ °¡Àå Àαâ ÀÖ´Â °ÍÁßÀÇ Çϳª´Â wxPython ÅøŶÀ¸·Î¼­ ±×°ÍÀº, À̹ø¿¡´Â wxWindows¶ó´Â C++ ÅøŶÀ» Æ÷ÀåÇÑ °ÍÀÌ´Ù. wxPython Àº Tkinter ±¸ÀÌÅøŶ º¸´Ù´Â ÀϹÝÀûÀ¸·Î ÈξÀ ´õ ¸ð¹üÀûÀÌ´Ù. ±×°ÍÀº ¶ÇÇÑ TkÀÇ "out of the box" º¸´Ù ´õ¿í ¸¹Àº Ç¥ÁØ ±â´ÉÀ» Á¦°øÇÑ´Ù. - Tkinter¿¡¼­´Â ¼öÀÛ¾÷À¸·Î ÇؾßÇÒ µµ±¸ÆÁ, »óŸ·´ë µîµî°ú °°Àº °Íµé. ³ª´Â wxWindows¸¦ »ç¿ëÇÏ¿© ÀÌÀüÀÇ °£´ÜÇÑ "Hello World" ¶óº§°ú ¹öÆ° ¿¹Á¦¸¦ Àç ÀÛ¼ºÇÒ °ÍÀÌ´Ù.

³ª´Â ÀÌ°ÍÀ» »ó¼¼ÇÏ°Ô »ìÇÇÁö´Â ¾Ê°Ú´Ù, ¿©·¯ºÐÀÌ wxPython ÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¿¡ °üÇÏ¿© ´õ ¾Ë°í ½ÍÀ¸¸é ¿©·¯ºÐÀº ±× ÆÐÅ°Áö¸¦ wxPython À¥»çÀÌÆ®¿¡¼­ ³»·Á ¹ÞÀ» ÇÊ¿ä°¡ ÀÖÀ» °ÍÀÌ´Ù.

ÀϹÝÀûÀÎ ¿ë¾î·Î ±× ÅøŶÀº ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¤ÀÇÇÏ¿©¼­ ¿ì¸®´Â À©µµ¿ì¸¦ ¸¸µé¼ö ÀÖ°í ÄÜÆ®·Ñµé·Î ±× À©µµ¿ì¸¦ ä¿ì¸ç ¸Þ½îµå¿Í ±×·¯ÇÑ ÄÜÆ®·ÑµéÀ» ¹­À» ¼ö ÀÖ´Ù. ±×°ÍÀº ¿ÏÀüÈ÷ °´Ã¼ ÁöÇâÀûÀ̹ǷΠ¿©·¯ºÐÀº ÇÔ¼öº¸´Ù´Â ¸Þ½îµå¸¦ »ç¿ëÇؾ߸¸ ÇÑ´Ù. ¿¹Á¦´Â ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ:

from wxPython.wx import *

# --- Define a custom Frame, this will become the main window ---
class HelloFrame(wxFrame):
   def __init__(self, parent, ID, title, pos, size):
        wxFrame.__init__(self, parent, ID, title, pos, size)
	# we need a panel to get the right background
        panel = wxPanel(self, -1)

	# Now create the text and button widgets
	self.tHello = wxTextCtrl(panel, -1, "Hello world", (3,3), (185,22))
        button = wxButton(panel, 10, "Clear", (15, 32))
        button = wxButton(panel, 20, "Quit", (100, 32))

	# now bind the button to the handler
        EVT_BUTTON(self, 10, self.OnClear)
        EVT_BUTTON(self, 20, self.OnQuit)
	
   # these are our event handlers
   def OnClear(self, event):
       self.tHello.Clear()

   def OnQuit(self, event):
       self.Destroy()

# --- Define the Application Object ---
# Note that all wxPython programs MUST define an
# application class derived from wxApp
class HelloApp(wxApp):
   def OnInit(self):
       frame = HelloFrame(NULL, -1, "Hello", (200,50),(200,90) )
       frame.Show(true)
       # self.setTopWindow(frame)
       return true

# create instance and start the event loop
HelloApp().MainLoop()

±×¸®°í ±×°ÍÀº ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ:

wxPython Hello program

ÁöÀûÇÒ ¿äÁ¡Àº ÇÁ·¹ÀÓ¿öÅ©¿¡ ÀÇÇؼ­ È£ÃâµÇ´Â ¸Þ½îµå¸¦ À§ÇÑ À̸§Áþ±â °ü·ÊÀÇ »ç¿ë¹ýÀÌ´Ù - OnXXXX. ¶ÇÇÑ »ç°Ç°ú À§Á¬µéÀ» ¿«´Â EVT_XXXÇÔ¼ö¸¦ ÁÖ¸ñÇ϶ó - ÀÌ·¯ÇÑ ¸ðµç °ÍµéÀÇ ¸ðÀÓÀÌ ÀÖ´Ù. wxPythonÀº ¹æ´ëÇÑ À§Á¬µéÀ», Tkinterº¸´Ùµµ ÈξÀ ´õ ¸¹ÀÌ °¡Áö´Âµ¥ ±×°ÍÀ» °¡Áö°í ¿©·¯ºÐÀº ´ë´ÜÈ÷ º¹ÀâÇÑ ±¸À̵éÀ» ¸¸µé ¼ö ÀÖ´Ù. ºÒÇàÇÏ°Ôµµ ±×°ÍµéÀº ÁÂÇ¥°è¸¦ »ç¿ëÇÏ´Â °æÇâÀÌ Àִµ¥ ±×°ÍÀÌ ±Ù°ÅÇÑ ÁÂÇ¥°è´Â Àá½Ã Áö³ª¸é ´ë´ÜÈ÷ Áö·çÇØÁø´Ù. »ó¾÷ÀûÀÎ ±¸ÀÌ ±¸ÃàÀÚ ¿ª½Ã »ç¿ë°¡´ÉÇϸç Èñ¸ÁÀûÀ¸·Î ¾î¶² »ç¶÷ÀÌ ¿ª½Ã ¹«·á ±¸À̸¦ Á¶¸¸°£ Á¦°øÇØ ÁÙ °ÍÀÌ´Ù.

±×·±µ¥ ÁÖ¸ñÇÏ¿© º¸¸é Èï¹ÌÀÖ´Â °ÍÀº ÀÌ°Í°ú ´ë´ÜÈ÷ ºñ½ÁÇÑ À§ÀÇ Tkinter ¿¹Á¦°¡ ¼­·Î Á¤È®È÷ °°Àº °³¼öÀÇ ½ÇÇà Äڵ带 °¡Áø´Ù´Â °ÍÀÌ´Ù. - 21ÁÙ

°á°úÀûÀ¸·Î, ¿©·¯ºÐÀÌ ´Ü¼øÈ÷ ÅؽºÆ® ±â¹ÝÀÇ ÅøÀ» À§Çؼ­ Àӽà GUI ¼³°è¸¦ ¿øÇÑ´Ù¸é, Tkinter´Â ¿©·¯ºÐÀÇ Çʿ並 ÃÖ¼ÒÇÑÀÇ ³ë·ÂÀ¸·Î ÃæÁ·½ÃÄÑ ÁÙ °ÍÀÌ´Ù. ¿©·¯ºÐÀÌ ¸ðµç ¿î¿µÃ¼Á¦¿¡¼­ ¿Ïº®ÇÑ »ç¾çÀÇ ±¸ÀÌ ¾îÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇϱ⸦ ¿øÇÑ´Ù¸é wxPythonÀ» ´õ¿í ÀÚ¼¼È÷ »ìÆ캸¶ó.

MFC¸¦ Æ÷ÇÔÇÏ¿© ´Ù¸¥ ÅøŶ, pyGTk, pyQt ´Â ¸ðµÎ ÇöÀç·Î´Â ¸®´ª½º¿¡¼­¸¸ °¡´ÉÇÏÁö¸¸ ±×·³¿¡µµ ºÒ±¸ÇÏ°í ÀáÀçÀûÀ¸·Î À©µµ¿ì¿¡ ¿ª½Ã ÀÌ½ÄµÉ ¼ö ÀÖ´Ù. ¸¶Áö¸·À¸·Î ÀÏÁ¾ÀÇ ÅؽºÆ® ±â¹ÝÀÇ ±¸ÀÌÀÎ curses°¡ ÀÖ´Ù! ¿ì¸®°¡ Tkinter·Î ¹è¿ö¿Â ¸¹Àº ±³ÈƵéÀº ÀÌ·¯ÇÑ ÅøŶ ¸ðµÎ¿¡ Àû¿ëµÇÁö¸¸ ±×·¯³ª °¢°¢Àº Àڽŵ鸸ÀÇ Æ¯¼º°ú ½À°üÀ» °¡Áø´Ù. Çϳª¸¦ ¼±ÅÃÇ϶ó, ±×°ÍÀ» ¾Ëµµ·Ï Ç϶ó ±×¸®°í ±¸ÀÌ µðÀÚÀÎÀÇ »õ·Î¿î ¼¼°è¸¦ Áñ°Ü¶ó.

Áö±ÝÀ¸·Î¼­´Â ÀÌ°ÍÀ¸·Î ÃæºÐÇÏ´Ù. ÀÌ°­Á´ TkinterÀÇ ÂüÁ¶ÆäÀÌÁö¸¦ ¸ñÇ¥·Î ÇÏÁö ¾Ê¾ÒÀ¸¸ç, ´ÜÁö ¿©·¯ºÐÀÌ ½ÃÀÛÇϵµ·Ï Çϱ⸸ Çϸé ÃæºÐÇÏ´Ù. ´Ù¸¥ Tkinter ÀÚ¿øÀ¸·Î ¸µÅ©ÇØÁÖ´Â ÆÄÀ̽ã À¥ÆäÀÌÁöÀÇ Tkinter ¼½¼ÇÀ» º¸¶ó

¶ÇÇÑ Tcl/Tk ¿¡ °üÇÑ Ã¥ÀÌ ¸î¸î ÀÖÀ¸¸ç Àû¾îµµ Çϳª´Â Tkinter ¿¡ °üÇÑ Ã¥ÀÌ´Ù. ±×·¸Áö¸¸ ³ª´Â »ç·Ê¿¬±¸ÀÇ Àå¿¡¼­ ´Ù½Ã Tkinter¸¦ ´Ù·ê °ÍÀÌ´Ù. °Å±â¿¡¼­ ³ª´Â ±¸ÀÌÇüÅÂÀÇ ¹èÄ¡ ¸ðµå ÇÁ·Î±×·¥À» ĸ½¶È­ÇÏ¿© À¯¿ë¼ºÀ» °³¼±ÇÏ´Â ÇÑ°¡Áö ¹æ¹ýÀ» ¿¹½ÃÇÒ °ÍÀÌ´Ù.


Previous Next Contents
 

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