Wallpaperchanger python

问题描述:

我一直试图通过结合不同来源的代码随机化我的壁纸变化与python。我设法让这样的代码: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) 

但是当我运行它,它变成我的壁纸完全黑屏。 任何修改建议?

+1

可能的重复[在ctypes中创建背景更换器,不工作](https://stackoverflow.com/questions/21715895/creating-a-background-changer-in-python-with-ctypes-not-工作) –

+0

另一个重复:https://stackoverflow.com/questions/40574622/how-do-i-set-the-desktop-background-in-python-windows –

问题

主要的问题我用你的代码看中的是你的os.path.join()功能的使用。请看下面的四行代码的:

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

在你的folder初始化,您连接drive和随机文件夹的名称。但是,如果使用os.path.join()初始化image_path,则会将drive,folderimage连接成指向图像位置的单个路径。或者至少,这是它应该做的。

不幸的是,由于您使用os.path.join()的方式,它会返回一个无效的目录,因此会导致无效的文件。这是因为folder已经包含存储在drive中的字符串,但是您仍然将这两个变量与该函数调用相结合。这是一个例子什么存储在image_path的路径看起来像现在:

“C:/用户/用户名/桌面/ FolderofWallpaperFolders/C:/Users/UserName/Desktop/FolderofWallpaperFolders/RandomlyChosenFolder/RandomlyChosenImage.jpg”

解决方案

简单的解决方案是你的image_path初始化更改为以下:

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

然而,你可能也想考虑你的变量命名约定。您的drive变量不仅存储指向您的驱动器的字符串,而且还存储文件夹FolderofWallpaperFolders的路径。对你来说,通过你的代码并改变你的一些变量名或改变每个变量负责存储的内容可能是值得的。然后仔细弄清楚如何将os.path.join()函数用于您的特定变量。