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.