Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python

Canvas. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ‚Π΅Π³ΠΈ ΠΈ анимация

Π˜Π·ΡƒΡ‡ΠΈΠ² Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π½Π° экзСмплярС Canvas, Π² этом ΡƒΡ€ΠΎΠΊΠ΅ рассмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ созданным Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌ для измСнСния ΠΈΡ… свойств, Π° Ρ‚Π°ΠΊΠΆΠ΅ создадим Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ.

Π’ Tkinter сущСствуСт Π΄Π²Π° способа «ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ» Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π½Π° холстС, – это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ‚Π΅Π³ΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ всСгда ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’Π΅Π³ΠΈ Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹. Π“Ρ€ΡƒΠΏΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° холстС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚Π΅Π³. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ свойства всСй Π³Ρ€ΡƒΠΏΠΏΡ‹. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятая Ρ„ΠΈΠ³ΡƒΡ€Π° Π½Π° Canvas ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚Π°ΠΊ ΠΈ Ρ‚Π΅Π³.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π½Π° холстС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ числСнныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ созданным Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° itemconfig ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свойства. ΠœΠ΅Ρ‚ΠΎΠ΄ coords устанавливаСт Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹. Если указываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ Ρ‚Π΅Π³, Ρ‚ΠΎ coords Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ холстом фокуса (Π½Π°ΠΆΠ°Ρ‚ΡŒ Tab ) измСнится Ρ†Π²Π΅Ρ‚ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ tag_bind позволяСт ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ событиС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ) ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π΅ Π½Π° Canvas. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ областям холста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ события. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ измСнСния Π½Π° холстС зависят ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΊΠ»ΠΈΠΊ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°. Анимация Π² tkinter

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ создаСтся анимация ΠΊΡ€ΡƒΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ двиТСтся ΠΎΡ‚ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ холста Π΄ΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ:

ΠœΠ΅Ρ‚ΠΎΠ΄ after Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‡Π΅Ρ€Π΅Π· количСство миллисСкунд, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

ΠšΡƒΡ€Ρ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ практичСских Ρ€Π°Π±ΠΎΡ‚: android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, pdf-вСрсия.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Tkinter. Canvas, рисованиС Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (Π§Π°ΡΡ‚ΡŒ 1)

РаньшС ΠΌΡ‹ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ стандартном Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ Tkinter. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ сказано ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ Canvas. ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдоставляСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, ΠΈ поэтому заслуТиваСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎ Π½Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Canvas? Π­Ρ‚ΠΎ слово пСрСводится с английского, ΠΊΠ°ΠΊ Β«ΠΏΠΎΠ»ΠΎΡ‚Π½ΠΎΒ», Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ спСцифику использования этого Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. Π­Ρ‚ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ гСомСтричСскиС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Tkinter. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс ΠΌΠ΅Ρ‡Ρ‚Ρ‹.

ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ Canvas, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ряд ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом классС ΠΈ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚?

Π›ΡŽΠ±ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΡ‚Π½ΠΎ Π² любой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ свою систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘Ρ‚ΠΎΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Paint. Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ каТдая Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Π½ΠΈΠ·Ρƒ ΠΎΠΊΠ½Π°. Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с Canvas. Π­Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΡ‚Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ оси – X ΠΈ Y, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях. ΠŸΠ΅Ρ€Π²Π°Ρ ось – это Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒ, Π° вторая – Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒ.

МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая наглядно дСмонстрируСт Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ эти Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ основанию систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ОснованиС находится Π½Π΅ Π² Π»Π΅Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΠ³Π»Ρƒ, ΠΊΠ°ΠΊ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Π° Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ.

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит пустоС пространство, Π° Ρ‚Π°ΠΊΠΆΠ΅ надпись, которая ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π³Π΄Π΅ находится курсор Π² Π½Π΅ΠΌ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ курсор, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

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

Π­Ρ‚ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ставит Ρ‚ΠΎΡ‡ΠΊΡƒ, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ Π΄Π²ΡƒΡ… осСй, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… пСрпСндикулярно.

Π‘Π°ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выглядит Ρ‚Π°ΠΊ.

Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ· Π΄Π²ΡƒΡ… осСй:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π­Ρ‚ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² точности ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ x ΠΈ y экзСмпляра event, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΏΠΎΠ»ΠΎΡ‚Π½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ элСмСнты с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ частично Π²ΠΈΠ΄Π΅Π½ Ρƒ Π»Π΅Π²ΠΎΠΉ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ, сами ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π½Π΅Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ взглядом, Π½ΠΎ элСмСнт ΠΌΠΎΠΆΠ½ΠΎ частично Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ экрана, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° Π²ΠΈΠ΄Π½Π° Ρ‡Π°ΡΡ‚ΡŒ элСмСнта Ρƒ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края. Π’ этом случаС Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΠΎΠ»ΠΎΡ‚Π½Π°.

Как осущСствляСтся рисованиС Π»ΠΈΠ½ΠΈΠΉ ΠΈ стрСлок?

Π›ΠΈΠ½ΠΈΠΈ ΠΈ стрСлки – это ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π° ΠΏΠΎΠ»ΠΎΡ‚Π½Π΅. Π­Ρ‚ΠΎ основа любого рисунка. РисованиС осущСствляСтся ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ А ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π‘.

Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ нСпосрСдствСнно Π»ΠΈΠ½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ). ΠŸΡ€Π°Π²Π΄Π°, для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с простого: создадим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΠΈΠΊΠΎΠ² ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡ‚Π½Ρƒ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π°Ρ‡Π°Π»Π° Π»ΠΈΠ½ΠΈΠΈ ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΊΠΎΠ½Ρ†Π°.

ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚, Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, создадим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая являСтся Π½Π΅ΠΊΠΈΠΌ ΠΌΠΈΠ½ΠΈ-Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ Paint. Π’Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса App ΠΌΡ‹ создаСм пустоС ΠΏΠΎΠ»ΠΎΡ‚Π½ΠΎ вмСстС с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ событий ΠΊΠ»ΠΈΠΊΠΎΠ².

ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΌΡ‹ Π½Π΅ зацикливаСмся Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса LimeForm Π² этом ΠΊΠΎΠ΄Π΅.

А ΡƒΠΆΠ΅ сам ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство строк ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Π΅Π³ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ. ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ это.

РисованиС линий в Tkinter

Π’Π°ΠΊ, ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠ»ΠΈΠΊΠΎΠ² ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΠΎΠ»ΠΎΡ‚Π½Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ draw() с событиСм этого Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ осущСствим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ поля line_start с Ρ†Π΅Π»ΡŒΡŽ отслСТивания ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ полоТСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.

Если Ρƒ line_start Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ этого события для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ΡŒ линию.

Π’Ρ‹Π²ΠΎΠ΄ тСкста Π² canvas

ΠŸΡ€ΠΈ этом сохраняСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ форматирования. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€, сСмСйство ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² тСкста.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ объСдинСниС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Entry с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ находится Π² тСкстовом элСмСнтС ΠΏΠΎΠ»ΠΎΡ‚Π½Π°. И Ссли Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΡ‚ΠΈΠ»ΡŒ, Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΠΎΡ‚Π½Π΅ ΡƒΠΆΠ΅ тСкст ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ВСкстовый элСмСнт ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ рСализуСтся с использованиСм canvas.create_text() ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ настройками, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ синий Ρ†Π²Π΅Ρ‚.

А Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ динамичСского повСдСния тСкстового элСмСнта, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ StringVar. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС.

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ тСкста Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ строк

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Бинтаксис создания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½, Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ tkinter :

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π’ tkinter ΠΎΡ‚ класса Canvas() ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-холсты, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Β«Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΒ», размСщая Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠŸΡ€ΠΈ создании экзСмпляра Canvas Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту. ΠŸΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π° холстС. Π’ΠΎΡ‡ΠΊΠΎΠΉ отсчСта являСтся Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΈΠΆΠ΅ создаСтся холст. На Π½Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° create_line() Ρ€ΠΈΡΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°Ρ‡Π°Π»Π° (x1, y1), Π·Π°Ρ‚Π΅ΠΌ – ΠΊΠΎΠ½Ρ†Π° (x2, y2):

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ свойства ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π’Π°ΠΊ activefill опрСдСляСт Ρ†Π²Π΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° ΠΏΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π° Π½Π΅Π³ΠΎ курсора ΠΌΡ‹ΡˆΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ create_rectangle() :

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ create_polygon() рисуСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΏΡƒΡ‚Π΅ΠΌ задания ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π³ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ:

Для удобства ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² скобки:

ΠœΠ΅Ρ‚ΠΎΠ΄ create_oval() создаСт эллипсы. ΠŸΡ€ΠΈ этом Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ гипотСтичСского ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ эллипс. Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³, Ρ‚ΠΎ соотвСтствСнно описываСмый ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ свСтло-сСрый ΠΊΡ€ΡƒΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для наглядности.

На холстС ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ тСкст. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° create_text():

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ располагаСтся Ρ†Π΅Π½Ρ‚Ρ€ тСкстовой надписи. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Π»Π΅Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ тСкста, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΊΠΎΡ€ΡŒ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ W (ΠΎΡ‚ Π°Π½Π³Π». west – Π·Π°ΠΏΠ°Π΄). Π”Ρ€ΡƒΠ³ΠΈΠ΅ значСния: N, NE, E, SE, S, SW, W, NW. Если Π±ΡƒΠΊΠ², Π·Π°Π΄Π°ΡŽΡ‰ΠΈΡ… сторону привязки, Π΄Π²Π΅, Ρ‚ΠΎ вторая опрСдСляСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ привязку (Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· Β«ΡƒΠΉΠ΄Π΅Ρ‚Β» тСкст ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹). Бвойство justify опрСдСляСт лишь Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ тСкста ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сСбя самого.

# УпраТнСния

# Canvas. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ‚Π΅Π³ΠΈ ΠΈ анимация

Π˜Π·ΡƒΡ‡ΠΈΠ² Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π½Π° экзСмплярС Canvas, Π² этом ΡƒΡ€ΠΎΠΊΠ΅ рассмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ созданным Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌ для измСнСния ΠΈΡ… свойств, Π° Ρ‚Π°ΠΊΠΆΠ΅ создадим Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ.

Π’ tkinter сущСствуСт Π΄Π²Π° способа Β«ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒΒ» Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π½Π° холстС, – это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ‚Π΅Π³ΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ всСгда ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’Π΅Π³ΠΈ Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹. Π“Ρ€ΡƒΠΏΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° холстС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚Π΅Π³. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ свойства всСй Π³Ρ€ΡƒΠΏΠΏΡ‹. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятая Ρ„ΠΈΠ³ΡƒΡ€Π° Π½Π° Canvas ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚Π°ΠΊ ΠΈ Ρ‚Π΅Π³.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π½Π° холстС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ числСнныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ созданным Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌ:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° itemconfig() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свойства. ΠœΠ΅Ρ‚ΠΎΠ΄ coords() устанавливаСт Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹. Если указываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ Ρ‚Π΅Π³, Ρ‚ΠΎ coords() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹:

Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ холстом фокуса (Π½Π°ΠΆΠ°Ρ‚ΡŒ Tab) измСнится Ρ†Π²Π΅Ρ‚ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚Π΅Π³ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ‚Π΅Π³Ρƒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ Π±Ρ‹Π» ΡƒΠΊΠ°Π·Π°Π½. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ эллипс ΠΈ линия содСрТат ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚Π΅Π³, Π° функция color измСняСт Ρ†Π²Π΅Ρ‚ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с Ρ‚Π΅Π³ΠΎΠΌ group1. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° (пСрСмСнная), имя Ρ‚Π΅Π³Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅):

ΠœΠ΅Ρ‚ΠΎΠ΄ tag_bind() позволяСт ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ событиС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ) ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π΅ Π½Π° Canvas. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ областям холста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ события. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ измСнСния Π½Π° холстС зависят ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΊΠ»ΠΈΠΊ:

ΠœΠ΅Ρ‚ΠΎΠ΄ delete() удаляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Если Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ холст, Ρ‚ΠΎ вмСсто ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ константа ALL.

# УпраТнСния

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ создаСтся анимация ΠΊΡ€ΡƒΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ двиТСтся ΠΎΡ‚ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ холста Π΄ΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ:

ΠœΠ΅Ρ‚ΠΎΠ΄ after() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‡Π΅Ρ€Π΅Π· количСство миллисСкунд, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля canvas

canvas.circle(x, y, radius)

РисуСт ΠΊΡ€ΡƒΠ³ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y с радиусом radius;

canvas.clear()

ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ холст Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ;

canvas.clear_rect(x, y, width, height)

ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ с Π»Π΅Π²Ρ‹ΠΌ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ ΡƒΠ³Π»ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y, ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ width ΠΈ высотой height;

canvas.draw()

Ѐункция пСрСрисовки холста. Π’Π°ΠΆΠ½ΠΎ: вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹Π·Π²Π°Π½Ρ‹ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рисования;

canvas.fill_circle(x, y, radius)

РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y с радиусом radius;

canvas.fill_rect(x, y, width, height)

РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Π»Π΅Π²Ρ‹ΠΌ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ ΡƒΠ³Π»ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y, ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ width ΠΈ высотой height;

canvas.fill_style(‘color’)

Ѐункция для измСнСния Ρ†Π²Π΅Ρ‚Π° закраски. color β€” устанавливаСмый Ρ†Π²Π΅Ρ‚. Π¦Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· списка Π½Π° этой страницС Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ;

canvas.fill_text(text, x, y, font=’Monospace’, size=24, align=’left’)

РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ тСкст text Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ font (Monospace ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π½ΠΈΡŽ), Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 24) пиксСлСй ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ align (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” Β«leftΒ»). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ выравнивания β€” Β«leftΒ», Β«rightΒ» ΠΈ Β«centerΒ»

canvas.line_to(x, y)

РисуСт линию ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ, с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y;

canvas.line_width(width)

УстанавливаСт ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΈ width Π² пиксСлях;

canvas.listen()

ЗапускаСт Ρ†ΠΈΠΊΠ» оТидания событий ΠΎΡ‚ холста. Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ оТидания Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

canvas.move_to(x, y)

УстанавливаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ, с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y;

canvas.radius_line(x, y, angle, length)

РисуСт Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ линию ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ x, y ΠΏΠΎΠ΄ ΡƒΠ³Π»ΠΎΠΌ angle (Π² градусах) ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ length.

canvas.reset()

ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ холст Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, сбрасываСт Ρ†Π²Π΅Ρ‚ Π½Π° Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΈ устанавливаСт ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΉ Π² 1;

canvas.set_color(‘color’)

Ѐункция для измСнСния Ρ†Π²Π΅Ρ‚Π° кисти. color β€” устанавливаСмый Ρ†Π²Π΅Ρ‚. Π¦Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· списка Π½Π° этой страницС Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ;

canvas.set_onclick(callback)

УстанавливаСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠ»ΠΈΠΊΠ° ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΠΏΠΎ холсту. Ѐункция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ callback Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” x ΠΈ y. НапримСр

canvas.stroke_rect(x, y, width, height)

РисуСт ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Π»Π΅Π²Ρ‹ΠΌ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ ΡƒΠ³Π»ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y, ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ width ΠΈ высотой height;

canvas.stroke_style(‘color’)

Π”Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ canvas.set_color

canvas.stroke_text(text, x, y, font=’Monospace’, size=24, align=’left’)

РисуСт ΠΊΠΎΠ½Ρ‚ΡƒΡ€ тСкста text Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ x, y ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ font (Monospace ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π½ΠΈΡŽ), Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 24) пиксСлСй ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ align (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” Β«leftΒ»). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ выравнивания β€” Β«leftΒ», Β«rightΒ» ΠΈ Β«centerΒ»

canvas.onclick(callback)

Π’ΠΎΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ canvas.set_onclick.

canvas.onkey(callback, Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python)

УстанавливаСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ наТатия клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key_code Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π’ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши.

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key_code ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, Ρ‚ΠΎ функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

canvas.onkeyup(callback, Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python)

УстанавливаСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ отпускания клавиши Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key_code Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π’ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΊΠΎΠ΄ ΠΎΡ‚ΠΏΡƒΡˆΠ΅Π½Π½ΠΎΠΉ клавиши.

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key_code ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, Ρ‚ΠΎ функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

ΠšΠΎΠ΄Ρ‹ клавиш Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² canvas.onkey

canvas.onrightclick(callback)

Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ canvas.set_onclick, Π½ΠΎ для ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ

ΠšΠΎΠ΄Ρ‹ клавиш

Код клавиши β€” это строка, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΊ рСгистру.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Canvas

A canvas widget manages a 2D collection of graphical objects β€” lines, circles, text, images, other widgets, and more. Tk’s canvas is an incredibly powerful and flexible widget and truly one of Tk’s highlights. It is suitable for a wide range of uses, including drawing or diagramming, CAD tools, displaying or monitoring simulations or actual equipment, and building more complex widgets out of simpler ones.

Note: Canvas widgets are part of the classic Tk widgets, not the themed Tk widgets.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ canvas Π² python
Canvas widgets.

Canvas widgets are created using the Canvas class:

Canvas widgets are created using the tk::canvas command:

Canvas widgets are created using the TkCanvas class:

Canvas widgets are created using the new_tk__canvas method, a.k.a. Tkx::tk__canvas :

You’ll often provide a width and height, either in pixels or any of the other standard distance units. As always, you can ask the geometry manager to expand it to fill the available space in the window. You might provide a default background color for the canvas, specifying colors as you learned about in the last chapter. Canvas widgets also support other appearance options like relief and borderwidth that we’ve used before.

Canvas widgets have a tremendous number of features, and we won’t cover everything here. Instead, we’ll start with a simple example, a freehand sketching tool, and incrementally add new pieces, each showing another feature of canvas widgets.

Creating Items

When you create a new canvas widget, it is essentially a large rectangle with nothing on it, truly a blank canvas, in other words. To do anything useful with it, you’ll need to add items to it. There are a wide variety of different types of items you can add. Here, we’ll add a simple line item to the canvas.

To create a line, you need to specify its starting and ending coordinates. Coordinates are expressed as the number of pixels away from the top-left corner, horizontally and vertically, i.e. (x,y). The pixel at the top-left corner, known as the origin, has coordinates (0,0). The «x» value increases as you move to the right, and the «y» value increases as you move down. A line is described by two points, which we’d refer to as (x0,y0) and (x1,y1). This code creates a line from (10,5) to (200,50):

The create_line method returns an item id (an integer) that uniquely refers to this item. We’ll see how it can be used shortly. Often, we don’t need to refer to the item later and can ignore the returned id.

The create line command returns an item id (an integer) that uniquely refers to this item. We’ll see how it can be used shortly. Often, we don’t need to refer to the item later and can ignore the returned id.

This command returns an item object representing the line. We’ll see how it can be used shortly. Often, we don’t need to refer to the item later, and can ignore the returned item object.

Internally, Tk refers to individual canvas items by a unique id, an integer starting at 1 and counting up for each object created. Ruby encapsulates this well inside item objects. In some cases, as well as to understand much of the reference documentation, you’ll need this numeric id. You can retrieve it via the id method of a canvas item object.

The create_line method returns an item id (an integer) that uniquely refers to this item. We’ll see how it can be used shortly. Often, we don’t need to refer to the item later and can ignore the returned id.

A Simple Sketchpad

Let’s start our simple sketchpad example. For now, we’ll implement freehand drawing on the canvas with the mouse. We create a canvas widget and attach event bindings to it to capture mouse clicks and drags. When the mouse is first pressed, we’ll remember that location as the «start» of our next line. As the mouse is moved with the mouse button held down, we create a line item from this «start» position to the current mouse location. This current location becomes the «start» position for the next line item. Every mouse drag creates a new line item.

Item Attributes

When creating items, you can also specify one or more item attributes, affecting how it appears. For example, we can specify that the line should be red and three pixels wide.

The exact set of attributes will vary according to the type of item. Some commonly used ones are:

If you have canvas items that change state, creating the item with both the regular and disabled* attribute variants can simplify your code. You simply need to change the item’s state rather than writing code to change multiple display attributes. The same applies to the active* attribute variants. Both encourage a more declarative style that can remove a lot of boilerplate code.

Just like with Tk widgets, you can change the attributes of canvas items after they’re created.

Item Types

Canvas widgets support a wide variety of item types.

Our sketchpad created simple line items, each a single segment with a start point and an end point. Lines items can also consist of multiple segments.

Lines have several interesting additional attributes, allowing for drawing curves, arrows, and more.

Rectangle

Rectangles are specified by the coordinates of opposing corners, e.g., top-left and bottom-right. They can be filled in (via fill ) with one color, and the outline given a different color.

Ovals items work exactly the same as rectangles.

Polygon

Image

Image items can display arbitrary images. By default, the item is centered at the coordinates you specify, but this can be changed with the anchor option, e.g., nw means the coordinates are where to put the top-left of the image.

Text items can display a block of text. Positioning the text works the same as with image items. Specify the text to display using the text attribute. All of the text in the item will have the same color (specified by the fill attribute) and the same font (specified by a font attribute).

Widget

One of the coolest things you can do with the canvas widget is embed other widgets inside it. This can be a lowly button, an entry (think in-place editing of text items), a listbox, a frame itself containing a complex set of widgets. anything! Remember when we said way back when that a canvas widget could act as a geometry manager? This is what we meant.

Canvas items that display other widgets are known as window items (Tk’s longstanding terminology for widgets). They are positioned like text and image items. You can give them explicit width and height attributes; they default to the widget’s preferred size. Finally, it’s important that the widget you’re placing on the canvas (via the window ) attribute be a child widget of the canvas.

Modifying Items

We’ve seen how you can modify the configuration options on an item β€” its color, width, etc. There are several other things you can do with items.

To delete items, use the delete method.

To change an item’s size and position, you can use the coords method. You supply new coordinates for the item, specified the same way as when you first created it. Calling this method without a new set of coordinates will return the current coordinates of the item. You can use the move method to offset one or more items horizontally or vertically from their current position.

All items are ordered from top to bottom in what’s called the stacking order. If an item later in the stacking order overlaps an item below it, the first item will be drawn on top of the second. The raise ( lift in Tkinter) and lower methods allow you to adjust an item’s position in the stacking order.

There are several more operations detailed in the reference manual to modify items and retrieve information about them.

Event Bindings

We’ve already seen that the canvas widget as a whole, like any other Tk widget, can capture events using the bind command.

You can also attach bindings to individual items in the canvas (or groups of them, as we’ll see in the next section using tags). So if you want to know whether or not a particular item has been clicked on, you don’t need to watch for mouse click events for the canvas as a whole and then figure out if that click happened on your item. Tk will take care of all this for you.

To capture these events, you use a bind command built into the canvas. It works exactly like the regular bind command, taking an event pattern and a callback. The only difference is you specify the canvas item this binding applies to.

Note the difference between the item-specific tag_bind method and the widget-level bind method.

Note the difference between the item-specific bind method and the widget-level g_bind method.

Let’s add some code to our sketchpad example to allow changing the drawing color. We’ll first create a few different rectangle items, each filled with a different color. We’ll then attach a binding to each of these. When they’re clicked on, they’ll set a global variable to the new drawing color. Our mouse motion binding will look at that variable when creating the line segments.

We’ve seen that every canvas item can be referred to by a unique id number. There is another handy and powerful way to refer to items on a canvas, using tags.

A tag is just an identifier of your creation, something meaningful to your program. You can attach tags to canvas items; each item can have any number of tags. Unlike item id numbers, which are unique for each item, many items can share the same tag.

What can you do with tags? We saw that you can use the item id to modify a canvas item (and we’ll see soon there are other things you can do to items, like move them around, delete them, etc.). Any time you can use an item id, you can use a tag. For example, you can change the color of all items having a specific tag.

Tags are a good way to identify collections of items in your canvas (items in a drawn line, items in a palette, etc.). You can use tags to correlate canvas items to particular objects in your application (for example, tag all canvas items that are part of the robot with id #X37 with the tag «robotX37»). With tags, you don’t have to keep track of the ids of canvas items to refer to groups of items later; tags let Tk do that for you.

You can assign tags when creating an item using the tags item configuration option. You can add tags later with the addtag method or remove them with the dtags method. You can get the list of tags for an item with the gettags method or return a list of item id numbers having the given tag with the find command.

As you can see, methods like withtag accept either an individual item or a tag; in the latter case, they will apply to all items having that tag (which could be none). The addtag and find methods have many other options, allowing you to specify items near a point, overlapping a particular area, etc.

Let’s use tags first to put a border around whichever item in our color palette is currently selected.

The canvas itemconfigure method provides another way to change the properties of a canvas item. The advantage over dealing with the canvas item object directly is that we can specify a tag, so that the change we’re making applies to all items having that tag. Without this, we could use gettags to get all the items, iterate through them, and set the option, but itemconfigure is more convenient.

Let’s also use tags to make the current stroke being drawn appear more prominent. When the mouse button is released, we’ll return the line to normal.

Scrolling

In many applications, you’ll want the canvas to be larger than what appears on the screen. You can attach horizontal and vertical scrollbars to the canvas in the usual way via the xview and yview methods.

You should be able to modify the sketchpad program to add scrolling, given what you already know. Give it a try.

Once you’ve done that, scroll the canvas down just a little bit, and then try drawing. You’ll see that the line you’re drawing appears above where the mouse is pointing! Surprised?

What’s going on is that the global bind command doesn’t know that the canvas is scrolled (it doesn’t know the details of any particular widget). So if you’ve scrolled the canvas down by 50 pixels, and you click on the top left corner, bind will report that you’ve clicked at (0,0). But we know that because of the scrolling, that position should really be (0,50).

The canvasx and canvasy methods translate the position onscreen (which bind reports) into the actual point on the canvas (taking into account scrolling).

Be careful if you’re adding canvasx and canvasy methods directly to the event binding scripts. You need to watch the quoting and substitutions to ensure the conversions are done when the event fires. As always, it’s better to place that code in a procedure separate from the event binding itself.

Here then, is our complete example. We probably don’t want the palette to be scrolled away when the canvas is scrolled, but we’ll leave that for another day.

Spotted a mistake? Couldn’t find what you were looking for? Suggestions? Let me know!
If you’ve found this tutorial useful, please check out Modern Tkinter.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *