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

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

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

Π˜Π·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ прорисуСтся Π½Π° экранС ΠΏΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ явном Π²Ρ‹Π·ΠΎΠ²Π΅ update_idletasks().

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ с двумя Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ β€” ΠΏΠΎΠ»Π΅ΠΌ Π²Π²ΠΎΠ΄Π° ΠΈ надписью. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ надпись Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связана с ΠΏΠΎΠ»Π΅ΠΌ Π²Π²ΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Ρ€ΠΎΡ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ свойств, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности ΠΏΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ:

from Tkinter import *

tk = Tk()

tv = StringVar()

Label(tk,

 textvariable=tv,

 relief="groove",

 borderwidth=3,

 font=("Courier", 20, "bold"),

 justify=LEFT,

 width=50,

 padx=10,

 pady=20,

 takefocus=False,

 ).pack()

Entry(tk,

 textvariable=tv,

 takefocus=True,

 ).pack()

tv.set("123")

tk.mainloop()

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π° экранС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ:

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ прямо ΠΏΡ€ΠΈ создании. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π½Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ видТСта–окна. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ свойства textvariable (тСкстовая пСрСмСнная), relief (Ρ€Π΅Π»ΡŒΠ΅Ρ„), borderwidth (ΡˆΠΈΡ€ΠΈΠ½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹), justify (Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅), width (ΡˆΠΈΡ€ΠΈΠ½Π°, Π² знакомСстах), padx ΠΈ pady (прослойка Π² пиксСлях ΠΌΠ΅ΠΆΠ΄Ρƒ содСрТимым ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°), takefocus (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ фокус ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши Tab), font (ΡˆΡ€ΠΈΡ„Ρ‚, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов Π΅Π³ΠΎ задания). Π­Ρ‚ΠΈ свойства достаточно Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², хотя ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Canvas ΡˆΠΈΡ€ΠΈΠ½Π° задаСтся Π² пиксСлях, Π° Π½Π΅ Π² знакомСстах.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ возмоТности ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ„ΠΎΠ½Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΌΡƒ ΠΏΠ»Π°Π½Ρƒ (тСксту), Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° (подсвСтка Π³Ρ€Π°Π½ΠΈΡ†Ρ‹) Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ состоянии ΠΈ ΠΏΡ€ΠΈ отсутствии фокуса:

from Tkinter import *

tk = Tk()

tv = StringVar()

Entry(tk,

textvariable=tv,

 takefocus=True,

 borderwidth=10,

 ).pack()

mycolor1 = "#%02X%02X%02X" % (200, 200, 20)

Entry(tk,

 textvariable=tv,

 takefocus=True,

 borderwidth=10,

 foreground=mycolor1,       # fg, тСкст Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°

 background="#0000FF",      # bg, Ρ„ΠΎΠ½ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°

 highlightcolor='green',    # подсвСтка ΠΏΡ€ΠΈ фокусС

 highlightbackground='red', # подсвСтка Π±Π΅Π· фокуса

 ).pack()

tv.set("123")

tk.mainloop()

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ стилСвыС ΠΎΠΏΡ†ΠΈΠΈ для всСх Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² сразу: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tk_setPalette(). Помимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ свойств Π² этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ selectForeground ΠΈ selectBackground (ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½ ΠΈ Ρ„ΠΎΠ½ выдСлСния), selectColor (Ρ†Π²Π΅Ρ‚ Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ состоянии, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ Checkbutton), insertBackground (Ρ†Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ вставки) ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

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

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· поля Π²Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get(). НапримСр, Ссли Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Entry ΠΈΠΌΠ΅Π½Π΅ΠΌ e, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ: e.get(). ΠŸΡ€Π°Π²Π΄Π°, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ get() экзСмпляров класса для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста Text: ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ScrolledText ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ модуля Python. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ€Π°ΠΌΠΊΠ΅ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ тСкстом ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ полосой ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ:

from Tkinter import *

from ScrolledText import ScrolledText


tk = Tk()              # ΠΎΠΊΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня

txt = ScrolledText(tk) # Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ тСкста с ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΎΠΉ

txt.pack()             # Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ размСщаСтся


for x in range(1, 1024): # Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ наполняСтся тСкстовым содСрТимым

txt.insert(END, str(2L**x)+"\n")


tk.mainloop()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ тСкстом Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Для Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Π² тСкстС Π² Tk прСдусмотрСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ индСксы. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π²Ρ€ΠΎΠ΄Π΅ 1.0 ΠΈ END ΡƒΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ β€” это Π½Π°Ρ‡Π°Π»ΠΎ тСкста (пСрвая строка, Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ) ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ†. (Π’ Tk строки Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π° символы строки β€” с нуля). Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список индСксов:

β€’ L.C Π—Π΄Π΅ΡΡŒ L β€” Π½ΠΎΠΌΠ΅Ρ€ строки, Π° C β€” Π½ΠΎΠΌΠ΅Ρ€ символа Π² строкС.

β€’ INSERT Π’ΠΎΡ‡ΠΊΠ° вставки.

β€’ CURRENT Π‘ΠΈΠΌΠ²ΠΎΠ», блиТайший ΠΊ курсору ΠΌΡ‹ΡˆΠΈ.

β€’ END ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ сразу Π·Π° послСдним символом Π² тСкстС

β€’ M.first, M.last Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚Π΅Π³ΠΎΠΌ M участка тСкста.

β€’ SEL_FIRST, SEL_LAST Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ тСкста.

β€’ M ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свои ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² тСкстС (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ END, INSERT ΠΈΠ»ΠΈ CURRENT). ΠŸΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ тСкста ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для Π½ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ.

β€’ @x,y Π‘ΠΈΠΌΠ²ΠΎΠ» тСкста, блиТайший ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст гипСртСкстовыми возмоТностями:

from Tkinter import *

import urllib

tk = Tk()

txt = Text(tk, width=64) # ΠΏΠΎΠ»Π΅ с тСкстом

txt.grid(row=0, column=0, rowspan=2)

addr=Text(tk, background="White", width=64, height=1) # ΠΏΠΎΠ»Π΅ адрСса

addr.grid(row=0, column=1)

page=Text(tk, background="White", width=64) # ΠΏΠΎΠ»Π΅ с html–кодом

page.grid(row=1, column=1)


def fetch_url(event):

 click_point = "@%s,%s" % (event.x, event.y)

 trs = txt.tag_ranges("href") # список областСй тСкста, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ href

 url = ""

 # опрСдСляСтся, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ участок ΠΏΡ€ΠΈΡˆΠ΅Π»ΡΡ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΠΈ, ΠΈ бСрСтся

 # ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ URL

 for i in range(0, len(trs), 2):

  if txt.compare(trs[i], "<=", click_point) and \

     txt.compare(click_point, "<=", trs[i+1]):

   url = txt.get(trs[i], trs[i+1])

 html_doc = urllib.urlopen(url).read()

 addr.delete("1.0", END)

 addr.insert("1.0", url) # URL помСщаСтся Π² ΠΏΠΎΠ»Π΅ адрСса

 page.delete("1.0", END)

 page.insert("1.0", html_doc) # показываСтся HTML–докумСнт


textfrags = ["Python main site: ", "http://www.python.org",

 "\nJython site: ", "http://www.jython.org",

 "\nThat is all!"]

for frag in textfrags:

 if frag.startswith("http:"):

  txt.insert(END, frag, "href") # URL помСщаСтся Π² тСкст с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ href

 else:

  txt.insert(END, frag) # Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ помСщаСтся Π² тСкст


# ссылки ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ синим Ρ†Π²Π΅Ρ‚ΠΎΠΌ

txt.tag_config("href", foreground="Blue", underline=1)

# ΠΏΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ ΠΌΡ‹ΡˆΠΈ Π½Π° тСкстС, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΌ ΠΊΠ°ΠΊ "href",

# слСдуСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ fetch_url()

txt.tag_bind("href", "<1>", fetch_url)


tk.mainloop() # запускаСтся Ρ†ΠΈΠΊΠ» событий


Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ (послС наТатия Π½Π° гипСрссылку) ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Для придания Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ участкам тСкста особых свойств Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡ… ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅Π³ΠΎΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС URL отмСчаСтся Ρ‚Π΅Π³ΠΎΠΌ href. ПозднСС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tag_config() Π·Π°Π΄Π°ΡŽΡ‚ΡΡ свойства отобраТСния тСкста, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ Ρ‚Π΅Π³ΠΎΠΌ. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ tag_bind() привязываСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ событиС (Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΠΈ) с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (fetch_url()).

Π’ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fetch_url() Π½ΡƒΠΆΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ участок тСкста ΠΏΡ€ΠΈΡˆΠ΅Π»ΡΡ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΠΈ. Для этого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tag_ranges() ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ всС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ href. Для опрСдСлСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ URL проводятся сравнСния (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ compare()) Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΌΡ‹ΡˆΡŒΡŽ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ². Π’Π°ΠΊ находится ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΏΠ°Π» Ρ‰Π΅Π»Ρ‡ΠΎΠΊ, ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get() получаСтся тСкстовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°. Найдя URL, Π΅Π³ΠΎ Π² ΠΏΠΎΠ»Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ адрСса, ΠΈ получаСтся HTML–код, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ URL.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ тСкстом. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ арсСнал Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Π½Π΅ исчСрпываСтся. О Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ свойствах ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ располоТСния

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ достаточно наглядСн, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² располоТСния, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² Tk. Π’ Ρ‚Ρ€Π΅Ρ… Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹: pack, grid ΠΈ place:

from Tkinter import *

tk = Tk()


# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚Ρ€ΠΈ Ρ€Π°ΠΌΠΊΠΈ

frames = {}

b = {}

for fn in 1, 2, 3:

 f = Frame(tk, width=100, height=200, bg="White")

 f.pack(side=LEFT, fill=BOTH)

 frames[fn] = f

 for bn in 1, 2, 3, 4: # Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ€Π°ΠΌΠΎΠΊ

  b[fn, bn] = Button(frames[fn], text="%s.%s" % (fn, bn))


# ΠŸΠ΅Ρ€Π²Π°Ρ Ρ€Π°ΠΌΠΊΠ°:

# Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡŽΡ‚ΡΡ ΠΊ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ

b[1, 1].pack(side=LEFT, fill=BOTH, expand=1)

b[1, 2].pack(side=LEFT, fill=BOTH, expand=1)

# Π•Ρ‰Π΅ Π΄Π²Π΅ β€” ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ