2017-06-29 60 views
0

我一直試圖通過結合不同來源的代碼隨機化我的壁紙變化與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 –

回答

0

問題

主要的問題我用你的代碼看中的是你的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()函數用於您的特定變量。