Сменщик обоев питон

Я пытался рандомизировать смену обоев с помощью 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)

но когда я запускаю его, мои обои превращаются в полностью черный экран. Любые предложения по модификации?


person AutomatioiTylsyys    schedule 29.06.2017    source источник
comment
Возможный дубликат Создание средства смены фона в python с ctypes, не работает   -  person Mike Scotty    schedule 29.06.2017
comment
Другой дубликат: stackoverflow.com/questions/40574622/   -  person Mike Scotty    schedule 29.06.2017


Ответы (1)


Проблема

Основная проблема, которую я вижу в вашем коде, — это использование вами функции 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 и случайное имя папки. Однако, когда вы инициализируете image_path с помощью os.path.join(), вы объединяете drive, folder и image в один путь, указывающий на расположение изображения. Или, по крайней мере, это то, что он должен делать.

К сожалению, из-за того, как вы используете os.path.join(), он возвращает недопустимый каталог и, следовательно, недопустимый файл. Это связано с тем, что folder уже содержит строку, хранящуюся в drive, но вы все равно объединяете эти две переменные с этим вызовом функции. Это пример того, как сейчас выглядит путь, хранящийся в image_path:

"C:/Пользователи/ИмяПользователя/Рабочий стол/ПапкаWallpaperFolders/C:/Пользователи/ИмяПользователя/Рабочий стол/ПапкаWallpaperFolders/RandomlyChosenFolder/RandomlyChosenImage.jpg"

Решение

Простое решение — изменить инициализацию image_path на следующее:

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

Однако вы также можете рассмотреть соглашения об именах переменных. Ваша переменная drive хранит не просто строку, указывающую на ваш диск, она хранит путь к папке FolderofWallpaperFolders. Возможно, вам стоит просмотреть свой код и изменить имена некоторых переменных или изменить то, за что каждая переменная отвечает за хранение. Затем тщательно выясните, как использовать функцию os.path.join() для ваших конкретных переменных.

person Xetnus    schedule 29.06.2017