Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 47

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

 champion = None

 ready_steady_go()

 go_b.config(state=DISABLED), quit_b.config(state=DISABLED)

 # Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ Ρ„ΠΈΠ½ΠΈΡˆΠ° всСх участников

 while sum(positions) < distance*nrunners:

  update_positions()

 update_positions()

 go_b.config(bg=champion) # Кнопка ΠΎΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π² Ρ†Π²Π΅Ρ‚ побСдитСля

 tk.update_idletasks()

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности языка Python 2.3 (Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sum() ΠΈ списковыС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ), поэтому для Π΅Π΅ выполнСния Π½ΡƒΠΆΠ΅Π½ Python вСрсии Π½Π΅ мСньшС 2.3.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Навыки ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ программисту. Одним ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ (псСвдо) ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования являСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π±ΠΎΠ»Π΅Π΅ свойствСнный Unix–систСмам β€” многопроцСссноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” здСсь Π½Π΅ рассматриваСтся). Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ (ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ дСйствуСт всСго ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ управлСния, Π° Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ управлСния. НСкоторыС участки ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ³Ρ€Π°ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ использования двумя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π΄Π°Π±Ρ‹ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ измСняСмых структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с внСшними рСсурсами. Для ограТдСния участков ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π·Π°ΠΌΠΊΠΈ ΠΈ сСмафоры.

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python прСдоставляСт довольно Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π½Π°Π±ΠΎΡ€ возмоТностСй для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π² модулях threading ΠΈ thread, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Queue). 

ЛСкция #12: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ рассматриваСтся созданиС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ прилоТСния с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для построСния интСрфСйса Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ срСдства («построитСли интСрфСйса»), Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ возмоТности графичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² (Tk).

ΠžΠ±Π·ΠΎΡ€ графичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Π‘Ρ‚Ρ€ΠΎΠΈΡ‚ΡŒ графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GUI, Graphical User Interface) для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² графичСского интСрфСйса ΠΈΠ»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°Π»ΡŒΠΊΡƒ с английского, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ².

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ список Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ»ΠΎΠ½, Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ:

β€’ Tkinter ΠœΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ располоТСниСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ выглядит ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… (Unix, Windows, Macintosh). Π’Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ поставку Python. Π’ качСствС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ руководство Β«An Introduction to TkinterΒ» (Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² TkinterΒ»), написанноС Π€Ρ€Π΅Π΄Ρ€ΠΈΠΊΠΎΠΌ Π›ΡƒΠ½Π΄ΠΎΠΌ: http://www.pythonware.com/library/tkinter/introduction/

β€’ wxPython ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ wxWidgets (Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π»Π°ΡΡŒ wxWindows). Выглядит Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ для всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠ΅Ρ‚ΡΡ, осущСствлСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° GL. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ для всСх основных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΠΉΠΌΠ΅Ρ‚ мСсто Tkinter Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях Python. Π‘Π°ΠΉΡ‚: http://www.wxpython.org/

β€’ PyGTK Набор Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для GTK+ ΠΈ Gnome. Волько для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ GTK.

β€’ PyQT/PyKDE Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Qt (ΠΏΠΎΠ΄ UNIX ΠΈΠ»ΠΈ Windows) ΠΈΠ»ΠΈ KDE.

β€’ Pythonwin ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ Π²ΠΎΠΊΡ€ΡƒΠ³ MFC, поставляСтся вмСстС с ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ win32all; Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Windows.

β€’ pyFLTK Аналог Xforms, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° OpenGL. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Windows ΠΈ Unix. Π‘Π°ΠΉΡ‚: http://pyfltk.sourceforge.net/

β€’ AWT, JFC, Swing ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ вмСстС с Jython, Π° для Jython доступны срСдства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Java. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Java.

β€’ anygui НСзависимый ΠΎΡ‚ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ для построСния графичСского интСрфСйса для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python. Π‘Π°ΠΉΡ‚: http://anygui.sourceforge.net/

β€’ PythonCard ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ графичСского интСрфСйса, сходный ΠΏΠΎ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ с HyperCard/MetaCard. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π° Π±Π°Π·Π΅ wxPython. Π‘Π°ΠΉΡ‚: http://pythoncard.sourceforge.net/

Бписок Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ссылок Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ графичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, доступныС ΠΈΠ· Python, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ адрСсу: http://phaseit.net/claird/comp.lang.python/python_GUI.html

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ. НапримСр, PythonCard ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ wxPython, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, скаТСм, Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Linux базируСтся Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ½ΠΎΠΉ GUI–библиотСкС wxWindows, которая, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, базируСтся Π½Π° GTK+ ΠΈΠ»ΠΈ Π½Π° Motif, Π° Ρ‚Π΅ β€” Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° X Window. ΠšΡΡ‚Π°Ρ‚ΠΈ, для Motif Π² Python ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ свои привязки.

Π’ Π»Π΅ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ Tkinter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ сути являСтся ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ для Tcl/Tk β€” извСстного графичСского ΠΏΠ°ΠΊΠ΅Ρ‚Π° для сцСнарного языка Tcl. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ построСния графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

О графичСском интСрфСйсС

ΠŸΠΎΡ‡Ρ‚ΠΈ всС соврСмСнныС графичСскиС интСрфСйсы ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния строятся ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ WIMP β€” Window, Icon, Menu, Pointer (ΠΎΠΊΠ½ΠΎ, ΠΈΠΊΠΎΠ½ΠΊΠ°, мСню, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ). Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΊΠΎΠ½ Ρ€ΠΈΡΡƒΡŽΡ‚ΡΡ элСмСнты графичСского интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для краткости Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ (widget β€” ΡˆΡ‚ΡƒΡ‡ΠΊΠ°). МСню ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… частях ΠΎΠΊΠ½Π°, Π½ΠΎ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ достаточно ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎ: ΠΎΠ½ΠΈ слуТат для Π²Ρ‹Π±ΠΎΡ€Π° дСйствия ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… дСйствий. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ графичСского интСрфСйса Β«ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚Β» ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ дСйствия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ указатСля. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ слуТит курсор ΠΌΡ‹ΡˆΠΈ ΠΈΠ»ΠΈ дТойстика, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅Β» устройства. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΊΠΎΠ½ΠΎΠΊ графичСский интСрфСйс ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ языка ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях позволяСт быстрСС ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² интСрфСйсС.

Основной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ графичСского интСрфСйса являСтся ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ. Об этом слСдуСт постоянно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ интСрфСйса. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρƒ программиста (ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π°) срСдств ΠΏΡ€ΠΈ создании графичСского интСрфСйса Π½ΡƒΠΆΠ½ΠΎ свСсти Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°, выбирая Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ наимСньшСго удивлСния: ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ интСрфСйса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ понятно Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠŸΠ»ΠΎΡ…ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ интСрфСйс ΠΏΠΎΡ€Ρ‚ΠΈΡ‚ ощущСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π°ΠΆΠ΅ Ссли Π·Π° фасадом интСрфСйса скрываСтся эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½ для Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠ΅ дСйствия Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрии экранов, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «мастСрами» (wizards). Однако Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” скорСС конструктор, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ дСйствиСм являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ построСниС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ дСйствия Π½Π΅ всСгда Π»Π΅Π³ΠΊΠΎ, поэтому компромиссом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³ΠΈΠ±Ρ€ΠΈΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ «мастСра» ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ возмоТности для собствСнных построСний. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, графичСский интСрфСйс Π½Π΅ являСтся самым эффСктивным интСрфСйсом Π²ΠΎ всСх случаях. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… областСй Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‰Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ языкС ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° сцСнарном языкС.

ΠžΡΠ½ΠΎΠ²Ρ‹ Tk

Основная Ρ‡Π΅Ρ€Ρ‚Π° любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с графичСским интСрфСйсом β€” ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ просто что–то считаСт (Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅) ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° своСго запуска Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°: Π΅Π΅ дСйствия зависят ΠΎΡ‚ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ЀактичСски, графичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСт бСсконСчный Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ графичСский интСрфСйс, событийно–ориСнтирована. Она ΠΆΠ΄Π΅Ρ‚ ΠΎΡ‚ интСрфСйса событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообразно своСму Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ.

Π­Ρ‚ΠΈ события Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² элСмСнтах графичСского интСрфСйса (Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°Ρ…) ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊ этим Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. Π‘Π°ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ многочислСнныС свойства (Ρ†Π²Π΅Ρ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€, располоТСниС), Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ принадлСТности (ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ хозяином Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ), ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для доступа ΠΊ своСму ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ.

РасполоТСниСм Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² (Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²) Π²Π΅Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ располоТСния. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ устанавливаСтся Π½Π° мСсто ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° располоТСния. Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, Π½ΠΎ ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Π’ Tk ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² располоТСния: простой ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊ (pack), сСтка (grid) ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ располоТСниС (place).

Но этого для Ρ€Π°Π±ΠΎΡ‚Ρ‹ графичСской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСдостаточно. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² графичСской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ взаимосвязаны ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. НапримСр, полоска ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ взаимосвязана с тСкстовым Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ: ΠΏΡ€ΠΈ использовании полоски тСкст Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎ тСксту полоска Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ Π² Tk ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ΠšΠ»Π°ΡΡΡ‹ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²

Для построСния графичСского интСрфСйса Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Tk ΠΎΡ‚ΠΎΠ±Ρ€Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² (Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС):