added background color changing to album art color

determines if new bg color is "dark" or "bright"
text and buttons invert color when bg color is too bright
This commit is contained in:
Brandon4466
2023-01-14 16:45:19 -08:00
parent 671ca07d4b
commit c23b8b01c2
6 changed files with 59 additions and 16 deletions

View File

@@ -17,6 +17,7 @@ import syncedlyrics
import textwrap
from PIL import Image, ImageTk
from io import BytesIO
import math
# Set the Spotify app's client ID and client secret
client_id = "69b82a34d0fb40be80b020eae8e80f25"
@@ -90,6 +91,8 @@ def createToken():
spotify = createToken()
bg_color = "#000000"
# Create the tkinter window
root = ttk.Tk()
root.title("Media Controller")
@@ -195,6 +198,7 @@ def unloadLyrics_pressed():
unloadLyrics()
loadNow_playing()
# def hide_devices():
# get_devices_button.grid()
# devices_list.grid_remove()
@@ -206,7 +210,11 @@ play_img = ttk.PhotoImage(file="icons/play-circle-x2.png")
pause_img = ttk.PhotoImage(file="icons/pause-circle-x2.png")
next_img = ttk.PhotoImage(file="icons/skip-next-x2.png")
previous_img = ttk.PhotoImage(file="icons/skip-previous-x2.png")
lyrics_img = ttk.PhotoImage(file="icons/lyrics.png")
play_img_black = ttk.PhotoImage(file="icons/play-circle-x2-black.png")
pause_img_black = ttk.PhotoImage(file="icons/pause-circle-x2-black.png")
next_img_black = ttk.PhotoImage(file="icons/skip-next-x2-black.png")
previous_img_black = ttk.PhotoImage(file="icons/skip-previous-x2-black.png")
# lyrics_img = ttk.PhotoImage(file="icons/lyrics.png")
album_art_img = ""
# album_art_img = ttk.PhotoImage(file="album_art.png")
@@ -216,11 +224,11 @@ album_art_img = ""
canvas = ttk.Canvas(root, width=480, height=320)
frame_artist_song = tk.Frame(root, width=(1280/3), height=400)
frame_artist_song = ttk.Frame(root, width=(1280/3), height=400, bg=bg_color)
# frame_controls = tk.Frame(root)
lyrics_button = tk.Frame(root)
album_art_frame = tk.Frame(root)
lyrics_label_frame = tk.Frame(root, width=(1280/3), height=400)
# lyrics_button = tk.Frame(root)
album_art_frame = ttk.Frame(root, bg=bg_color)
lyrics_label_frame = ttk.Frame(root, width=(1280/3), height=400, bg=bg_color)
lyrics_label_frame.grid_propagate(0)
root.grid_rowconfigure(0, weight=1)
@@ -230,21 +238,23 @@ root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
# root.grid_columnconfigure(2, weight=1)
root.configure(background=bg_color)
lyrics_label_frame.grid_rowconfigure(0, weight=1)
lyrics_label_frame.grid_columnconfigure(0, weight=1)
# Create the media control buttons and a text label
play_button = ttk.Button(frame_artist_song, image=play_img, command=play, borderwidth=0, relief=None)
pause_button = ttk.Button(frame_artist_song, image=pause_img, command=pause, borderwidth=0)
next_button = ttk.Button(frame_artist_song, image=next_img, command=next, borderwidth=0)
previous_button = ttk.Button(frame_artist_song, image=previous_img, command=previous, borderwidth=0)
play_button = ttk.Button(frame_artist_song, image=play_img, command=play, borderwidth=0, relief=None, background=bg_color)
pause_button = ttk.Button(frame_artist_song, image=pause_img, command=pause, borderwidth=0, background=bg_color)
next_button = ttk.Button(frame_artist_song, image=next_img, command=next, borderwidth=0, background=bg_color)
previous_button = ttk.Button(frame_artist_song, image=previous_img, command=previous, borderwidth=0, background=bg_color)
maxvolume_button = tk.Button(root, text="Max Volume", command=maxvolume)
minvolume_button = tk.Button(root, text="Min Volume", command=minvolume)
randomvolume_button = tk.Button(root, text="Random Volume", command=randomvolume)
volumeslider_button = tk.Scale(root, from_=100, to=0, orient=ttk.VERTICAL, length=240, command=volumeslider)
#doaudio_analysis = tk.Button(root, text="Audio Analysis", command=doaudioanalysis)
artist_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER)
song_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 24), wraplength=(1280/3), justify=ttk.CENTER)
artist_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
song_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 24), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
track_progress_label = tk.Label(root, text="")
track_duration_label = tk.Label(root, text="")
# track_combined_label = tk.Label(root, text="")
@@ -259,8 +269,8 @@ progress_bar = tk.Progressbar(root, orient=ttk.HORIZONTAL, length=1280)
searching_for_devices_label = tk.Label(root, text="Searching for Devices...", font=("Helvetica", 24))
device_name_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 12))
# background_image_label = tk.Label(root, image=album_art_img)
lyrics_label = tk.Label(lyrics_label_frame, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER)
loadLyrics_button = ttk.Button(lyrics_button, image=lyrics_img, command=loadLyrics_pressed, borderwidth=0)
lyrics_label = tk.Label(lyrics_label_frame, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
# loadLyrics_button = ttk.Button(lyrics_button, image=lyrics_img, command=loadLyrics_pressed, borderwidth=0)
# album_art_canvas = ttk.Canvas(root)
# album_art_canvas_create_image = album_art_canvas.create_image(0, 0, image=album_art_img)
album_art_label = tk.Label(album_art_frame, image=album_art_img)
@@ -336,8 +346,41 @@ def update_song_label():
lyrics_label.config(text="")
lrc = syncedlyrics.search("[" + track_name + "] [" + artist_name + "]")
album_art_img_data = requests.get(album_art_url).content
album_art_img = ImageTk.PhotoImage(Image.open(BytesIO(album_art_img_data)).resize((300,300)))
album_art_img_open = Image.open(BytesIO(album_art_img_data))
album_art_img = ImageTk.PhotoImage(album_art_img_open.resize((300,300)))
album_art_label.config(image=album_art_img)
bg_color_img = album_art_img_open.resize((1,1), resample=0)
bg_color_img_pixel = bg_color_img.getpixel((0,0))
bg_color = "#" + '%02x%02x%02x' % (bg_color_img_pixel)
root.config(background=bg_color)
frame_artist_song.config(background=bg_color)
device_name_label.config(background=bg_color)
song_label.config(background=bg_color)
artist_label.config(background=bg_color)
play_button.config(background=bg_color)
pause_button.config(background=bg_color)
next_button.config(background=bg_color)
previous_button.config(background=bg_color)
lyrics_label_frame.config(background=bg_color)
lyrics_label.config(background=bg_color)
if math.sqrt(0.299 * (bg_color_img_pixel[0] ** 2) + 0.587 * (bg_color_img_pixel[1] ** 2) + 0.114 * (bg_color_img_pixel[2] ** 2)) > 186:
song_label.config(foreground="black")
artist_label.config(foreground="black")
device_name_label.config(foreground="black")
lyrics_label.config(foreground="black")
play_button.config(image=play_img_black)
pause_button.config(image=pause_img_black)
next_button.config(image=next_img_black)
previous_button.config(image=previous_img_black)
else:
song_label.config(foreground="white")
artist_label.config(foreground="white")
device_name_label.config(foreground="white")
lyrics_label.config(foreground="white")
play_button.config(image=play_img)
pause_button.config(image=pause_img)
next_button.config(image=next_img)
previous_button.config(image=previous_img)
# album_art_label.grid_forget()
# album_art_label.grid()
root.after(500, update_song_label)
@@ -387,7 +430,7 @@ def unloadNow_playing():
play_button.grid_forget()
next_button.grid_forget()
progress_bar.grid_forget()
loadLyrics_button.grid_forget()
# loadLyrics_button.grid_forget()
def loadDevices_list():
devices_list.grid(row=1, column=1, pady=10)