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)
但是当我运行它,它变成我的壁纸完全黑屏。 任何修改建议?
答
问题
主要的问题我用你的代码看中的是你的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
,folder
和image
连接成指向图像位置的单个路径。或者至少,这是它应该做的。
不幸的是,由于您使用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()
函数用于您的特定变量。
可能的重复[在ctypes中创建背景更换器,不工作](https://stackoverflow.com/questions/21715895/creating-a-background-changer-in-python-with-ctypes-not-工作) –
另一个重复:https://stackoverflow.com/questions/40574622/how-do-i-set-the-desktop-background-in-python-windows –