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

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

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

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

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

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

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

b[1, 3].pack(side=BOTTOM, fill=Y)

b[1, 4].pack(side=BOTTOM, fill=BOTH)


# Вторая Ρ€Π°ΠΌΠΊΠ°:

# Π”Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ свСрху

b[2, 1].grid(row=0, column=0, sticky=NW+SE)

b[2, 2].grid(row=0, column=1, sticky=NW+SE)

# ΠΈ ΠΎΠ΄Π½Π° Π½Π° Π΄Π²Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Π½ΠΈΠ·Ρƒ

b[2, 3].grid(row=1, column=0, columnspan=2, sticky=NW+SE)


# Π’Ρ€Π΅Ρ‚ΡŒΡ Ρ€Π°ΠΌΠΊΠ°:

# Кнопки высотой ΠΈ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ Π² 40% Ρ€Π°ΠΌΠΊΠΈ, ΡΠΊΠΎΡ€ΡŒ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ.

# ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ якоря 1/10 ΠΎΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈ высоты Ρ€Π°ΠΌΠΊΠΈ

b[3, 1].place(relx=0.1, rely=0.1, relwidth=0.4, relheight=0.4, anchor=NW)

# Кнопка строго ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. Π―ΠΊΠΎΡ€ΡŒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ

b[3, 2].place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=CENTER)

# Π―ΠΊΠΎΡ€ΡŒ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ якоря 9/10 ΠΎΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈ высоты Ρ€Π°ΠΌΠΊΠΈ

b[3, 3].place(relx=0.9, rely=0.9, relwidth=0.4, relheight=0.4, anchor=CENTER)


tk.mainloop()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ pack просто заполняСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ пространство Π½Π° основании прСдпочтСния Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ края, нСобходимости Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π΅ΠΌΡƒ приходится ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для достаточно простых схСм располоТСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ².

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ grid ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠΈ сСтки (это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° способ вСрстки Ρ‚Π°Π±Π»ΠΈΡ† Π² HTML). ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ располагаСмому Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ячССк сСтки (row β€” строка, column β€” столбСц), Π° Ρ‚Π°ΠΊΠΆΠ΅, Ссли Π½ΡƒΠΆΠ½ΠΎ, ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ячССк (Π² строках Π½ΠΈΠΆΠ΅ ΠΈΠ»ΠΈ Π² столбцах ΠΏΡ€Π°Π²Π΅Π΅) сколько ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ (свойства rowspan ΠΈΠ»ΠΈ columnspan). Π­Ρ‚ΠΎ самый Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈΠ· всСх ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ².

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ place позволяСт Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΠΈ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ Π² долях ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° видТСта–хозяина.

НСпосрСдствСнно Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° располоТСния: ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‰ΠΈΠ΅ ограничСния Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ просто Π½Π΅ смогут Π±Ρ‹Ρ‚ΡŒ располоТСны.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π² Tkinter

БрСдствами Tkinter ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСкст, ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Canvas), Π½ΠΎ ΠΈ растровыС изобраТСния. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠΊΠΎΠ½ΠΊΠΈ с растровым ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Python Imaging Library, PIL):

import Tkinter, Image, ImageTk


FILENAME = "lena.jpg" # Ρ„Π°ΠΉΠ» с графичСским ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ


tk = Tkinter.Tk()

c = Tkinter.Canvas(tk, width=128, height=128)

src_img = Image.open(FILENAME)


img = ImageTk.PhotoImage(src_img)

c.create_image(0, 0, image=img, anchor="nw")

c.pack()

Tkinter.Label(tk, text=FILENAME).pack()


tk.mainloop()

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся:

Π—Π΄Π΅ΡΡŒ использован видТСт–рисунок (Canvas). Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Image ΠΈ ImageTk ΠΈΠ· PIL получаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚β€“ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, подходящСС для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² рисунок Tkinter. Бвойство anchor Π·Π°Π΄Π°Π΅Ρ‚ ΡƒΠ³ΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ привязываСтся ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ (0, 0) Π² рисункС. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это сСвСро–западный ΡƒΠ³ΠΎΠ» (NW β€” North–West). Π”Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности: n (сСвСр), w (Π·Π°ΠΏΠ°Π΄), s (юг), e (восток), ne, sw, se ΠΈ Ρ (Ρ†Π΅Π½Ρ‚Ρ€).

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° рисункС (ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ свойства графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ видТСта–рисунка):

from Tkinter import *


tk = Tk()

# Рисунок 300x300 пиксСлСй, Ρ„ΠΎΠ½ β€” Π±Π΅Π»Ρ‹ΠΉ

c = Canvas(tk, width=300, height=300, bg="white")


c.create_arc((5, 5, 50, 50), style=PIESLICE) # Π‘Π΅ΠΊΡ‚ΠΎΡ€ ("кусок ΠΏΠΈΡ€ΠΎΠ³Π°")

c.create_arc((55, 5, 100, 50), style=ARC)    # Π”ΡƒΠ³Π°

c.create_arc((105, 5, 150, 50), style=CHORD, # Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚

 start=0, extent=150, fill="blue")           # ΠΎΡ‚ 0 Π΄ΠΎ 150 градусов

# Ломаная со стрСлкой Π½Π° ΠΊΠΎΠ½Ρ†Π΅

c.create_line([(5, 55), (55, 55), (30, 95)], arrow=LAST)

# ΠšΡ€ΠΈΠ²Π°Ρ (сглаТСнная ломаная)

c.create_line([(105, 55), (155, 55), (130, 95)], smooth=1)

# ΠœΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°

c.create_polygon([(205, 55), (255, 55), (230, 95)], fill="green")

# Овал

c.create_oval((5, 105, 50, 120), )

# ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ красного Ρ†Π²Π΅Ρ‚Π° с большой сСрой Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ

c.create_rectangle((105, 105, 150, 130), fill="red",

 outline="grey", width="5")

# ВСкст

c.create_text((5, 205), text=" Hello", anchor="nw")

# Π­Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΠ³ΠΎΠ» привязки

c.create_oval((5, 205, 6, 206), outline="red")

# ВСкст с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ

c.create_text((105, 205), text="Hello,\nmy friend!",

justify=LEFT, anchor="c")

c.create_oval((105, 205, 106, 206), outline="red")

# Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

c.create_text((205, 205), text="Hello,\nmy friend!",

 justify=CENTER, anchor="se")

c.create_oval((205, 205, 206, 206), outline="red")


c.pack()

tk.mainloop()

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° экранС появится ΠΎΠΊΠ½ΠΎ:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ create_* ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, свойства ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² дальнСйшСм: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто, ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок ΠΈ Ρ‚.Π΄. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΠΆΠΎΠΊ, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΏΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΡƒ ΠΌΡ‹ΡˆΠΈ:

from Tkinter import *

from random import choice


colors = "Red Orange Yellow Green LightBlue Blue Violet".split()

R = 10


tk = Tk()

c = Canvas(tk, bg="White", width="4i", height=300, relief=SUNKEN)

c.pack(expand=1, fill=BOTH)


def change_ball(event):

 c.coords(CURRENT, (event.x–R, event.y–R, event.x+R, event.y+R))

 c.itemconfigure(CURRENT, fill=choice(colors))


oval = c.create_oval((100–R, 100–R, 100+R, 100+R), fill="Black")

c.tag_bind(oval, "<1>", change_ball)

tk.mainloop()

Π—Π΄Π΅ΡΡŒ нарисован ΠΊΡ€ΡƒΠΆΠΎΠΊ радиуса R, с Π½ΠΈΠΌ связана функция change_ball() ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ. Π’ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΡ€ΡƒΠΆΠΊΠ° (Π΅Π³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€ располоТСн Π² мСстС Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΌΡ‹ΡˆΠΈ) ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Ρ†Π²Π΅Ρ‚ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ itemconfigure(). Π’Π΅Π³ CURRENT Π² Tkinter использован для указания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ принял событиС.

ГрафичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Tkinter

Π’Π΅ΠΏΠ΅Ρ€ΡŒ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написанноС с использованиСм Tkinter. Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Ρ„Π°ΠΉΠ» с графичСским ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ мСню File с ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ Open ΠΈ Exit, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Canvas, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ изобраТСния (ΠΎΠΏΡΡ‚ΡŒ потрСбуСтся ΠΏΠ°ΠΊΠ΅Ρ‚ PIL):

from Tkinter import *

import Image, ImageTk, tkFileDialog

global img, imgobj


def show():

 global img, imgobj

 # Запрос Π½Π° имя Ρ„Π°ΠΉΠ»Π°

 filename = tkFileDialog.askopenfilename()

 if filename != (): # Если имя Ρ„Π°ΠΉΠ»Π° Π±Ρ‹Π»ΠΎ Π·Π°Π΄Π°Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

  # рисуСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

  src_img = Image.open(filename)

  img = ImageTk.PhotoImage(src_img)

  # конфигурируСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° рисункС

  c.itemconfigure(imgobj, image=img, anchor="nw")


tk = Tk()

main_menu = Menu(tk)      # формируСтся мСню

tk.config(menu=main_menu) # мСню добавляСтся ΠΊ ΠΎΠΊΠ½Ρƒ

file_menu = Menu(main_menu) # создаСтся подмСню

main_menu.add_cascade(label="File", menu=file_menu)

# ЗаполняСтся мСню File

file_menu.add_command(label="Open", command=show)

file_menu.add_separator() # Ρ‡Π΅Ρ€Ρ‚Π° для отдСлСния ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню

file_menu.add_command(label="Exit", command=tk.destroy)


c = Canvas(tk, width=300, height=300, bg="white")

# Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚β€“ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° рисункС

imgobj = c.create_image(0, 0)

c.pack()


tk.mainloop()

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (с Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. БущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ создаСтся Π½Π° основС ΠΎΠΊΠ½Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ становится особым Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ. ΠŸΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставлСна Π½ΠΈΠΆΠ΅:

from Tkinter import *

import Image, ImageTk, tkFileDialog


class App(Tk):

 def __init__(self):

  Tk.__init__(self)

  main_menu = Menu(self)

  self.config(menu=main_menu)

  file_menu = Menu(main_menu)

  main_menu.add_cascade(label="File", menu=file_menu)

  file_menu.add_command(label="Open", command=self.show_img)

  file_menu.add_separator()

  file_menu.add_command(label="Exit", command=self.destroy)


  self.c = Canvas(self, width=300, height=300, bg="white")

  self.imgobj = self.c.create_image(0, 0)

  self.c.pack()


 def show_img(self):

  filename = tkFileDialog.askopenfilename()

  if filename != ():

   src_img = Image.open(filename)

   self.img = ImageTk.PhotoImage(src_img)

   self.c.itemconfigure(self.imgobj, image=self.img, anchor="nw")