2017-06-29 4 views
0

J'ai essayé de randomiser mon changement de fond d'écran avec python en combinant le code de différentes sources. J'ai réussi à faire ce code:Wallpaperchanger python

import ctypes 
import os 
import random 
drive = "C:/Users/UserName/Desktop/FolderofWallpaperFolders" 
afolder = os.listdir(drive) 
folder = drive+ "/" + random.choice(afolder) 
aimage = os.listdir(folder) 
image = random.choice(aimage) 
image_path = os.path.join(drive, folder, image) 
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0,image_path, 3) 

mais quand je l'exécute, il transforme mon fond d'écran en un écran complètement noir. Des suggestions de modification?

+1

Possible duplication de [Création d'un changeur d'arrière-plan en python avec ctypes, ne fonctionne pas] (https://stackoverflow.com/questions/21715895/creating-a-background-changer-in-python-with-ctypes-not- de travail) –

+0

Un autre doublon: https://stackoverflow.com/questions/40574622/how-do-i-set-the-desktop-background-in-python-windows –

Répondre

0

Problème

Le principal problème que je vois avec votre code est votre utilisation de la fonction os.path.join(). Regardez les quatre lignes de votre code ci-dessous:

drive = "C:/Users/UserName/Desktop/FolderofWallpaperFolders" 
folder = drive+ "/" + random.choice(afolder) 
image = random.choice(aimage) 
image_path = os.path.join(drive, folder, image) 

Dans votre initialisation de folder, vous concaténer drive et le nom d'un dossier aléatoire. Toutefois, lorsque vous initialisez image_path en utilisant os.path.join(), vous concaténer drive, folder et image en un seul chemin qui pointe vers l'emplacement d'une image. Ou, au moins, c'est ce que c'est censé faire.

Malheureusement, en raison de la façon dont vous utilisez os.path.join(), il retourne un répertoire invalide et donc un fichier invalide. C'est parce que folder contient déjà la chaîne stockée dans drive, mais vous combinez ces deux variables de toute façon avec cet appel de fonction. Ceci est un exemple de ce que le chemin stocké dans image_path ressemble en ce moment:

"C:/Users/username/Desktop/FolderofWallpaperFolders/C: /Users/UserName/Desktop/FolderofWallpaperFolders/RandomlyChosenFolder/RandomlyChosenImage.jpg"

solution

la solution simple est de changer votre initialisation image_path à ce qui suit:

image_path = os.path.join(folder, image) 

Cependant, vous pouvez également prendre en compte vos conventions de dénomination des variables. Votre variable drive ne stocke pas simplement une chaîne pointant vers votre lecteur, elle stocke un chemin d'accès au dossier FolderofWallpaperFolders. Cela peut vous valoir la peine de parcourir votre code et de changer certains de vos noms de variables ou de changer ce que chaque variable est responsable de stocker. Ensuite, comprendre avec soin comment utiliser la fonction os.path.join() pour vos variables spécifiques.