Ваяем музыкальную открытку на Python

Ваяем музыкальную открытку на Python

@webware

t.me/webware

Вдруг пришла идея сделать музыкальную открытку на Python. Почему бы нет?


Приступим.

Для этого конечно нужен графический интерфейс. Воспользуемся уже входящим в стандарт модулем tkinter . Tkinter - это интерфейс Python к GUI Tk.


Импортируем модуль, рисуем окно, пишем в заголовке окна "Hello codeby!" и запрещаем изменять размеры окна по ширине и высоте.

# -*- coding:utf -8 -*-
from tkinter import *

root = Tk()
root.title("Hello codeby!")
root.resizable(width=False, height=False)

Далее создаём холст с размерами выбранной картинки и прописанным путём к ней. Параметр bg="blue" задаёт цвет фона, если картинка будет недоступна.

C = Canvas(root, bg="blue", height=330, width=500)
filename = PhotoImage(file = "C:\\black_blue.png")
background_label = Label(root, image=filename)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

Следующим этапом пишем текст. На холсте текст и фон к нему элементарно раскрашиваются кодами цветов без привлечения дополнительных модулей типа colorama. Отступы от текста делаются по осям padx и pady. Позиционирование самого текста на холсте через relx и rely.

zapis = "\n Hello\n codeby!\n"
label2 = Label(text=zapis, justify=LEFT, fg="#D3D3D3", bg="#000000", font="Serif 24", padx=5, pady=2)
label2.place(relx=.1, rely=.1)

hello = "\n Привет КулХацкерам \n\n форума codeby!\n"
end = Label(text=hello, justify=LEFT, fg="#FF0000", bg="#000000", font="Arial 12", padx=5, pady=1)
end.place(relx=.1, rely=.5)

C.pack()
root.mainloop

Ну что же, осталось прикрутить сюда музычку. Для этого импортируем модуль pygame и укажем путь до MP3. Если нужно чтобы трек звучал не один раз, то в скобках строки mixer.music.play() указывает нужную цифру.

from pygame import mixer

mixer.init()
mixer.music.load("C:\\key.mp3")
mixer.music.play()

Вот что в итоге у нас вышло:

# -*- coding:utf -8 -*-
from tkinter import *
from pygame import mixer


root = Tk()
root.title("Hello codeby!")
root.resizable(width=False, height=False)

C = Canvas(root, bg="blue", height=330, width=500)
filename = PhotoImage(file = "C:\\black_blue.png")
background_label = Label(root, image=filename)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

zapis = "\n Hello\n codeby!\n"
label2 = Label(text=zapis, justify=LEFT, fg="#D3D3D3", bg="#000000", font="Serif 24", padx=5, pady=2)
label2.place(relx=.1, rely=.1)

hello = "\n Привет КулХацкерам \n\n форума codeby!\n"
end = Label(text=hello, justify=LEFT, fg="#FF0000", bg="#000000", font="Arial 12", padx=5, pady=1)
end.place(relx=.1, rely=.5)


mixer.init()
mixer.music.load("C:\\key.mp3")
mixer.music.play()


C.pack()
root.mainloop

Скачать демооткрытку

Просто из архива извлеките файлы в корень диска С, либо не забудьте в коде поправить пути на картинку и аудио, если это будет другая директория.


Ну вот и чудненько. 

Всё это конечно прекрасно и замечательно, но здесь есть одно небольшое "но". Но ведь если вы решите сделать какую-нибудь поздравительную или романтическую открытку для родных или девушки, то маловероятно что они пользуются питоном )))


Этот вопрос тоже решается, но об этом в следующей статье.

UPD:

Смотрел-смотрел я на картинку, и понял что в строке заголовка пёрышко, которое Tkinter нам подсовывает по умолчанию, не в тему)))


Вставим туда иконку с форума. Да только как её туда вставить без танцев с бубном?

Решение совсем несложное пришло - нужно иконку закодировать в Base64. Идём в любой онлайн-декодер, скармливаем иконку, и получаем нужный код. Копируем код, он длиннючий, поэтому в питоне его нужно заключить в тройные кавычки.

icon = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABRUlEQVQ4jc3SMWtUQRQF4G/e20SM
mCpYiGZJJbxdI4KVlUjAZnERG8HGyjY/YCurIP4AsbMT/Al2gqhlTHjTBiSVgtWyLItvxsIXeEQt
ZAs9MAyXOedw7p0bqqrKlkCxjPj/MOi19xwzLNoDmzhGauuL+NZyYQNrJwne4Aq20C+COyF4vfdw
9XKMsV8WrgXerZT6Mcb+uTO2sN9t4W4IbsQY52dXFZlnRbA7nuyDlD0NweTTYZzDbOExbkLofOPn
sjBI2SNM6zq+hOGgup0Z13XcheGwupSSGuvdGcBmSl4JFhvn3Yftq9Va05iUpTGMbg0cfcnPT8Sn
DWRGgXtvP0bQNJ4I3h8cxikcfc0PMqOuJvxmE+NKz/WmsZ2yD5gVhUFg3vyMfqFL7vkV1ffGXs52
2vf1nLzITE+L/5Tgr/DvV3lpgx+THmin4biX1AAAAABJRU5ErkJggg==
'''

Но чтобы это добро заработало, пропишем следующий код:

img = PhotoImage(data=icon)
root.tk.call('wm', 'iconphoto', root._w, img)

Запускаем... Годно!

Источник codeby.net

Report Page