врывр
аппраер
Для написания программы нам понадобятся изображения шариков в png формате:
Рис. 2. Изображения шариков в png формате.
Рис. 2.
from tkinter import *
from PIL import Image
tk = Tk()
canvas = Canvas(tk, width=600, height=480)
canvas.pack()
# Создание изображений из файлов PNG
img1 = Image.open('bronze.png')
img2 = Image.open('Ag0.png')
# Объединение двух изображений в один PhotoImage
combined_img = Image.alpha_composite(img1, img2)
# Создание файла из объединенного изображения
combined_img.save('new.png', format='png')
# Создание PhotoImage из файла
tk_mg = PhotoImage(file='new.png')
# Создание изображений в Canvas
canvas.create_image(300, 240, image=tk_mg) # отобразить объединенное изображение
mainloop()
Лист. 1.
from tkinter import *
from PIL import Image
from io import BytesIO
import base64
tk = Tk()
canvas = Canvas(tk, width=600, height=480)
canvas.pack()
# Загрузка изображений
img1 = Image.open('bronze.png')
img2 = Image.open('Ag0.png')
# Объединение изображений
combined_img = Image.alpha_composite(img1, img2)
# Сохранение в буфер памяти
buffer = BytesIO()
combined_img.save(buffer, format="PNG")
# Преобразование в base64 и создание PhotoImage
img_data = base64.b64encode(buffer.getvalue()).decode("ascii")
tk_img = PhotoImage(data=img_data, format="png")
# Отображение на холсте
canvas.create_image(300, 240, image=tk_img)
mainloop()
Лист. 2.
from tkinter import *
from random import choice
class Peg():
playground = [0]*49
for i in (0, 1, 5, 6, 7, 8, 12, 13, 35, 36, 40, 41, 42, 43, 47, 48):
playground[i]=-1
SIZE = 50
COLORES = ('#aa9', '#776', '#ccd') # Цвета поля
tk = Tk()
FILE = ('red.png', 'yellow.png', 'gold.png', 'green.png', 'emerald.png',
'cyan.png', 'blue.png', 'pink.png', 'azure.png', 'bronze.png',
'purple.png', 'scarlet.png', 'steel.png', 'silver.png')
img = [PhotoImage(file=i) for i in FILE]
cnv = None
def create_window():
Peg.cnv = Canvas(width=Peg.SIZE*7, height=Peg.SIZE*7)
for n in range(49):
x = (n % 7) * Peg.SIZE
y = (n // 7) * Peg.SIZE
Peg.cnv.create_rectangle(x, y, x+Peg.SIZE, y+Peg.SIZE, width=1,
fill=Peg.COLORES[0 if Peg.playground[n] == 0 else 1], outline=Peg.COLORES[2])
Peg.cnv.pack()
def __init__(self, n):
if Peg.cnv == None: Peg.create_window()
x = (n % 7) * Peg.SIZE + Peg.SIZE / 2
y = (n // 7) * Peg.SIZE + Peg.SIZE / 2
self.num = Peg.cnv.create_image(x, y, image=choice(Peg.img), anchor=CENTER, tag='allBalls')
Peg.playground[n] = self.num
Peg.cnv.tag_bind(self.num, '<Button-1>', self.play)
def play(self, event):
Peg.cnv.tkraise(self.num)
Peg.cnv.bind("<B1-Motion>", self.motion)
def motion(self, event):
x = event.x-Peg.cnv.coords(self.num)[0]
y = event.y-Peg.cnv.coords(self.num)[1]
Peg.cnv.move(self.num, x, y)
def newgame(A=[10, 16, 17, 18, 24, 31]):
for i in A:
this = Peg(i)
Peg.SIZE = 70
Peg.tk.title("Игра Peg")
newgame()
mainloop()
Лист. 1.