2012-05-05 34 views
2

我是Python新手,當我製作一個程序將我的背景改爲國家地理日常圖片時遇到問題。它獲得了jpeg的路徑,但是當我使用該命令更改桌面背景(對於Windows)時,它只是將背景更改爲純黑色。該代碼本身不會拋出任何錯誤,它只是不工作如何傷口想要它。這是代碼。牆紙換紙器不能正常工作

import urllib2 
import ctypes 

SPI_SETDESKWALLPAPER = 20 
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/") 
code = url.readlines() 
pos = code[1303].split("\"",2) 
imgurl = pos[1] 
print imgurl 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, imgurl , 0) 
+0

你確定它可以採取一個網址?你有沒有嘗試下載文件,並給它的本地版本的路徑? –

+0

是的,我認爲你將不得不實際檢索圖像,我懷疑Windows會爲你做這件事! – kindall

回答

2

您似乎將URL傳遞到set wallpaper命令,而不是圖像的路徑。首先獲取圖像。改爲像這樣嘗試。

import urllib2 
import ctypes 

SPI_SETDESKWALLPAPER = 20 
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/") 
code = url.readlines() 
pos = code[1303].split("\"",2) 
imgurl = pos[1] 

print imgurl 
# Changes after here 
url2 = urllib2.urlopen(imgurl) 
out = open("wallpaper.jpg", "wb") 
out.write(url2.read()) 
out.close() 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "wallpaper.jpg" , 0) 

我並沒有真正嘗試過(在Windows不運行),所以也許它會解決這個問題,也許不是!

PS是真正脆弱的代碼,用於解析URL,但讓它工作的榮譽!

+0

謝謝!它現在工作得很好。另外,我知道這是一種不穩定的代碼,但我真的不知道如何去做LOL。 –

0

你用來解析url的代碼確實非常脆弱。你會更好地使用正則表達式。這個正則表達式搜索包含圖像的獨特div,然後移除除url之外的所有內容。
另外,使用with來打開文件比較好,因爲它會自動關閉文件。
改進的代碼將被:

import urllib2 
import ctypes 
import re 

SPI_SETDESKWALLPAPER = 20 
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/") 
code = url.read() 
imgurl = re.sub(r'(.|\n)+?<div class="primary_photo">(.|\n)+?<img src="(.+?)"(.|\n)+', r'\3', code) 

print imgurl 
url2 = urllib2.urlopen(imgurl) 
with open("wallpaper.jpg", "wb") as f: 
    f.write(url2.read()) 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "wallpaper.jpg" , 0)