Interface gráfica para feh ---bg-scale (Wallpapers)

Quem usa gerenciadores de janela em seus sistemas precisa de algum programa para definir os papéis de parede. Sei que o nitrogen é bastante popular e completo, mas por questão pessoal, sempre usei o feh na linha de comando mesmo.
Eu estava num daqueles dias que não tinha nada para fazer, então resolvi escrever esse código para otimizar mais ainda o processo de setar os wallpapers com o feh (nem sei se realmente precisava hahahah).
Dependências: tkinter, pillow ou PIL (Python Imaging Library).
opcionais: Fonte Awesome e Fonte Inter (Caso não deseje usá-las é só mudar as fontes no código).

#!/usr/bin/python3
from tkinter import *
from PIL import ImageTk, Image
import os

# Define a lista de imagens
images_path = "/home/user/Imagens/Wallpapers"
images = os.listdir(images_path)
current_image = -1  # Define -1 como valor padrão

# Define a função para mudar o papel de parede
def change_wallpaper(image_path):
    os.system(f"feh --bg-scale {image_path}")

# Define a função para exibir a imagem atual na label
def show_image(update_wallpaper=True):  # Adiciona parâmetro update_wallpaper
    global current_image
    if current_image >= 0:  # Verifica se já foi selecionada alguma imagem
        image_path = os.path.join(images_path, images[current_image])
        img = Image.open(image_path)
        img = img.resize((500, 300), Image.LANCZOS)
        img_tk = ImageTk.PhotoImage(img)
        label.config(image=img_tk)
        label.image = img_tk
        if update_wallpaper:  # Verifica se o papel de parede deve ser atualizado
            change_wallpaper(image_path)
        # Atualiza a legenda
        label_num.config(text=f"Imagem {current_image+1}/{len(images)}")

# Define a função para avançar para a próxima imagem
def next_image():
    global current_image
    current_image = (current_image + 1) % len(images)
    show_image()

# Define a função para voltar para a imagem anterior
def prev_image():
    global current_image
    current_image = (current_image - 1) % len(images)
    show_image()

# Define a função para exibir a imagem selecionada pelo usuário
def select_image():
    global current_image
    try:
        index = int(entry.get()) - 1
        if index >= 0 and index < len(images):
            current_image = index
            show_image()
    except ValueError:
        pass

# Cria a janela principal
root = Tk()
root.title("FehPy")
root.geometry('500x430')
root.minsize(500, 430)
root.maxsize(500, 430)
root.config(bg='#2B313C')

# Define a imagem padrão baseada no arquivo ${HOME}/.fehbg
fehbg = os.system('cat /home/user/.fehbg | grep ^feh | cut -c 27- > /home/user/.default-img.txt')
with open('/home/user/.default-img.txt', 'r') as feh_path:
    default_feh = feh_path.readlines()[0]
    actual_image = default_feh.replace('\n', '')
    imagem = actual_image.replace("'", "")
    img = imagem.replace(' ', '')
default_image_path = img

# Cria a label para exibir a imagem
label = Label(root, width=500, height=300)
label.pack()

# Cria a legenda para a imagem
label_num = Label(root, text="Imagem 0/0", bg='#2B313C', fg='#FFF', font=('Inter', 10))
label_num.pack()

# Cria a entrada para selecionar a imagem
entry = Entry(root, width=3, bg='#1A202B', fg='#FFF', font=('Inter', 10), insertbackground='#FFF')
entry.pack(pady=5)

# Cria o botão para exibir a imagem selecionada pelo usuário
button_select = Button(root, text="Selecionar", bg='#2B313C', fg='#FFF', font=('Inter', 10), command=select_image)
button_select.pack()

# Cria o botão para avançar para a próxima imagem
button_next = Button(root, text="", bg='#2B313C', fg='#FFF', font=('Awesome', 15), command=next_image)
button_next.pack(padx=5, pady=5, side=RIGHT)

# Cria o botão para voltar para a imagem anterior
button_prev = Button(root, text="", bg='#2B313C', fg='#FFF', font=('Awesome', 15), command=prev_image)
button_prev.pack(padx=5, pady=5, side=LEFT)

# Exibe a imagem padrão na label
img = Image.open(default_image_path)
img = img.resize((500, 300), Image.LANCZOS)
img_tk = ImageTk.PhotoImage(img)
label.config(image=img_tk)
label.image = img_tk

# Inicia o loop da interface gráfica
root.mainloop()

Para funcionar, informe o caminho da pasta com wallpapers na variável “images_path” e mude a palavra “user” para o nome do seu usuário lá na variável “fehbg” . A variável fehbg também precisa de um caminho para salvar um arquivo de texto com o nome do wallpaper extraído de do arquivo ${HOME}/.fehbg, por padrão ela cria um arquivo oculto na home .default-img.txt. Como usei fontes específicas também pode ser necessário alterálas ou até mesmo o nome dos botões.
Quem tiver alguma idéia de melhorar o código ou dar alguma outra sugestão, fique à vontade.

Segue abaixo uma imagem do programa.

5 curtidas