Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/07/2006, à 02:07

Mahoru`Tsunemi

Programe de changement automatique du wallpaper [v0.4-2]

C'est integré sous KDE, mais sur Gnome j'ai pas trouvé quelque chose de bien fait.

Donc je me suis dis, "tiens ce soir j'ai rien à faire je vais en coder un, j'en ai envie depuis quelques semaines".
Quelque réserves, et on se met à coder.

Def apres def ca avance, quelques tests à chaque fois.

Puis quelques problèmes avec la PIL (Python Imaging lib), je les résouds, et là, un énorme problème (toujours avec cette foutu PIL).
Un truc tout simple mais qui à minuit et demi met bien 10 mins a se faire trouver.

Ça repart ça repart et voilà, le script est presque prêt, il ne manque plus que la commande à envoyer a gConf.

Ça marche enfin, peut être un peu de repos... et bé nan... Gnome refuse d'updater le meme wallpaper 2 fois (ou 3 fois) de suite hmm .

On se code un petit système de détection et un petit changement de nom de wallpaper. On reteste. Une fois, c'est bon. 2 fois, c'est bon. 5 fois, c'est booooooooooon. Eeeennnfffiiinnn. cool


Donc voilà un petit script en Python tout crade que demain je nettoierais, et je que je commenterais.
Mais voilà le probleme. Je suis nulle en français et j'ai besoin de personne différentes pour m'aider à faire le beta-test (plus il y a d'ordis mieux c'est).

Donc je cherche des bon français (lost-in-the-shell> on a pas forcément besoin d'être français; je suis algérien wink . Akane>Oui c'etais une expression tongue ) et des beta-testers.
Je décrirais demain exactement le programme.

A demain midi pour les checks et beta-testers, à demain soir (peut-être) pour les personne interessées.
20060721 0200

Ha oui, le script s'appelle DotWP mais c'étais juste par manque d'inspiration. tout mes script commence par Dot tongue
20060721 1026

ha aussi, pour que ca sois auto il faut quand meme l'ajouter dans le cron ^^"
20060721 1317
------------------------ CHANGELOG ---------------------
v0.4-2
ajout : un systeme qui permet de choisir quel wallpaper utiliser (et pour quel screen si on en a definit plusieur)

-------------------------- TODO -------------------------
du plus urgent au moins urgent :
betatest >> n'importe qui, j'aimerai des personnes avec plusieur moniteur si possible
une interface graphique. il faut que je me renseigne sur les moyen de faire un gui avec python.


PS : pour les modos qui trouve ce post avec encore trop de fautes, ne vous gênez pas, corrigez les, mais je tenterai de le faire demain dans l'après midi. >> Bon ba c'est fait.
PS2 : il est bien 2H du mat mais pour moi le changement de date ce fait a 5H du mat' .
PS3 : Oui ce message sera edit pour etre plus joli a lire. et je mettrais plus d'info dessu apres la petite histoire.
PS4 : Merci a lost-in-the-shell pour m'avoir envoyer un mail avec mon podt corriger.

Dernière modification par Akane`Mahoru (Le 23/07/2006, à 14:59)

Hors ligne

#2 Le 21/07/2006, à 10:07

Mahoru`Tsunemi

Re : Programe de changement automatique du wallpaper [v0.4-2]

v0.4-2

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random, commands, Image, sys, os
ver = "0.4-2"

##### DEBUT CONFIG #######
pathconfig = "~/DotWP/"			## répertoire qui contient la liste et les images finales
typefile   = "bmp"			## type d'image sauvegarder (bmp, png, jpg... tant que gnome et la PIL savent les utiliser c'est bon)
resoX      = 1024			## Résolution X d'un des écran ( résolution = X * Y )
resoY      = 768			## Résolution Y d'un des écran ( résolution = X * Y )
screenX    = 2				## Nombre de ligne d'écran
screenY    = 1				## Nombre de colonne d'écran
####### FIN CONFIG #######

print "DotWP " + ver + " executing"
changeX=changeY=0
pathconfig = os.path.expanduser(pathconfig)					## on convertis les ~ en chemin utilisable par python
if pathconfig[-1] != "/" : pathconfig = pathconfig + "/"			## on ajoute un / a la fin du pathconfig si il n'y est pas
if not os.path.exists(pathconfig): os.mkdir(pathconfig)			## on vérifie que le répertoire du script existe sinon on le crée
if not os.path.exists(pathconfig + "list.txt"): open(pathconfig + "list.txt","w")	## on vérifie que la liste existe sinon on la crée
### fonction pour requperer la liste des fichier a utiliser
def GetList(List=[""],num=0,PreItem=" "):
	readfile = open(pathconfig + "list.txt","r") 				## on ouvre le fichier en lecture seule
	while PreItem != "":							## on initialise la boucle pour lire tout le fichier ligne a ligne
		PreItem = readfile.readline()					## on lise une ligne
		Item = PreItem[:-1].replace("\t", "")				## on enlève les tab et le retour a la lignes
		List.append(Item)						## on place la ligne dans la liste
		num = num + 1							## on incrémente le nombre de ligne lue
	readfile.close								## on ferme le fichier
	if num == 1:								## si il n"y a aucune ligne dans le fichier on arrête l'exécution
		print "Aucune ligne dans le fichier list ou erreur du script.\nVérifier votre fichier list.txt avant de me contacter."
		sys.exit(1)
	return List,num


### choix et redimenssionement de l'image
def rndconvimage(screendoedX,screendoedY,rnd,end=0,nerreur=0):
	while end == 0: 							## init de la boucle pour verifie que l'image est utilisable
		try:
			if rnd == 0 or nerreur > 0:
				rnd = random.choice(xrange(num))			## on random un nombre de 1 a num
				while List[rnd] == "":					## si la ligne correspondante est vide on recommence
					rnd = random.choice(xrange(num))		## donc on re random un nombre

			print "Utilisation de : " + List[rnd] + "\t( " + str(rnd) + " )" +"\tpour screen : " + str(screendoedX) + ", " + str(screendoedY)
			image = Image.open(List[rnd]).resize((resoX, resoY), Image.BICUBIC) ## on ouvre et redimensionne l'image
			if str(image.size) == ("(" + str(resoX) + ", " + str(resoY) + ")"): ## si l'image redimensionné = préférence alors on peut sortir de la boucle
				end = 1
		except:
			print "Image inexistante ou illisible : " +  List[rnd]
			nerreur = nerreur + 1
			if nerreur > 10: 					## si il y a plus de 10 erreur dans le traitement d'un screen, l'exécution est arrêter
				print "Trop d'erreur dans cette boucle. c'est peut être due au fait qu'il y ai trop d'image que la PIL n'arrive pas a lire.\nVérifier votre liste ou contacter moi."
				sys.exit(1)
	return image, rnd

### assemblage et sauvegarde de l'image de fin
def mergeimage(coroon,nuse,changeX,changeY):
	def multiple(changeX,changeY,nfile = 0,screendoedX=0,screendoedY=0,nletter=0,PreItem=" ",corodico={}):
		if coroon == 1:
			corofilein = open(pathconfig + "last.txt","r")
			PreItem = corofilein.readline()
			while PreItem != "":			
				letter=""
				nletter=0
				while letter != "=":
					letter = PreItem[nletter]
					nletter = nletter + 1
				corodico[PreItem[:nletter-1]] = PreItem[:-1][nletter:]
				PreItem = corofilein.readline()
			corofilein.close	
		corofileout = open(pathconfig + "last.txt","w")
		finalimage = Image.new("RGB",((resoX*screenX),resoY*screenY))	## on crée l'image finale
		while screendoedY < screenY:					## tant qu'on a pas traiter toute les lignes, on continue
			screendoedX = 0
			imageX = Image.new("RGB",((resoX*screenX),resoY)) 	## on (re)crée une image "ligne"
			screendoedY = screendoedY + 1
			while screendoedX < screenX:				## tant qu'on a pas terminer la ligne on continue
				screendoedX = screendoedX + 1
				if coroon == 1 and ((str(changeX) + "," + str(changeY)) != (str(screendoedX) + "," + str(screendoedY))):
					nfile = corodico[(str(screendoedX) + "," + str(screendoedY))]
				if nuse > 0 and ((str(changeX) + "," + str(changeY)) == (str(screendoedX) + "," + str(screendoedY))): nfile = nuse
				ImageXtmp, coroout = rndconvimage(screendoedX,screendoedY,int(nfile))
				nfile=0
				corofileout.write(str(screendoedX) + "," + str(screendoedY) + "=" + str(coroout) + "\n") 
				imageX.paste(ImageXtmp, (resoX*(screendoedX-1), 0, resoX*screendoedX, resoY))	## dans l'image "ligne" on met une image redimensionné
			finalimage.paste(imageX, (0, resoY*(screendoedY-1), resoX*screenX, resoY*screendoedY))	## dans l'image finale on met notre image "ligne"
		return finalimage
	finalimage = multiple(changeX,changeY)					## et sinon on fait la procédure complète
	if commands.getstatusoutput("gconftool-2 -g /desktop/gnome/background/picture_filename")[1][-5] == "1": ## on regarde quel était le dernier wallpaper utiliser par le programme
		outfile = "final2." + typefile
		commands.getstatusoutput("rm " + pathconfig + "final1.???")
	else:
		outfile = "final1." + typefile
		commands.getstatusoutput("rm " + pathconfig + "final2.???")
	finalimage.save(pathconfig + outfile)					## on sauvegarde l'image en bmp. en 1024*768, 2screen ça prend 4.5mo
	return outfile

## ajout d'une ligne a la liste après verif
def addtolist():
	if len(sys.argv) > 2: 							## pour ne pas avoir une erreur a la con
		line = commands.getstatusoutput("pwd")[1] + "/" + sys.argv[2]	## on regarde quel est le répertoire actuel 
		try:
			Image.open(line).resize((resoX,resoY)) 		## on ouvre l'image choisie et on tente de la redimensionné. avec ça on est sur que la PIL sera utiliser l'image
			open(pathconfig + "list.txt","a").write(line + "\n")	## on écris le path de l'image dans la liste
			print "Fichier : " + line + " ajouter a la liste"
		except: print "Fichier imposible a ajouter"			## sinon on dis qu'il y a une erreur
	else: print "Argument manquant\nRegardez 'dotwp help' pour plus d'info" ## et ici, si il manque es argument ça affiche un message d'erreur
	return

def change(letter=" ",nletter=0):
	if len(sys.argv) > 2:
		while not letter in [",", "."]:
			letter = sys.argv[2][nletter]
			nletter = nletter + 1
		changeX,changeY = int(sys.argv[2][:nletter-1]),int(sys.argv[2][nletter:])

		if changeX > screenX or changeY > screenY:
			print "Erreur d'argument."
			sys.exit(1)
		commands.getstatusoutput("gconftool-2 -t string -s /desktop/gnome/background/picture_filename '" + pathconfig + str(mergeimage(1,0,changeX,changeY)) + "'") ## et on exécute presque tout le reste du programme
	else: print "Argument manquant\nRegardez 'dotwp help' pour plus d'info" ## et ici, si il manque es argument ça affiche un message d'erreur
	return

def use(letter=" ",nletter=0):
	if len(sys.argv) > 3:
		while not letter in [",", "."]:
			letter = sys.argv[3][nletter]
			nletter = nletter + 1
		nuse,changeX,changeY = int(sys.argv[2]),int(sys.argv[3][:nletter-1]),int(sys.argv[3][nletter:])
		if changeX > screenX or changeY > screenY:
			print "Erreur d'argument."
			sys.exit(1)
		commands.getstatusoutput("gconftool-2 -t string -s /desktop/gnome/background/picture_filename '" + pathconfig + str(mergeimage(1,nuse,changeX,changeY)) + "'") ## et on exécute presque tout le reste du programme
	elif len(sys.argv) > 2 and screenX == 1 and screenY == 1:
		nuse = int(sys.argv[2])
		commands.getstatusoutput("gconftool-2 -t string -s /desktop/gnome/background/picture_filename '" + pathconfig + str(mergeimage(1,nuse,1,1)) + "'") ## et on exécute presque tout le reste du programme
	else: print "Argument manquant\nRegardez 'dotwp help' pour plus d'info" ## et ici, si il manque es argument ça affiche un message d'erreur
	return

def help():
	print "DotWP par Akane`Mahoru ( akane.mahoru (at) dot-world (dot) net )"
	print "DotWP est un script qui permet de changer le wallpaper sous *gnome*"
	print "en fonction de fichier choisis aléatoirement dans une liste."
	print "Il ne peu faire que des rectangle comme wallpaper."
	print "(vos image serons moche si son ratio est trop différant"
	print "de celui de vos préférences ou alors que l'image est réduite"
	print "ou trop agrandie\n"
	print "dotwp [add fichier-a-ajouter | change screenX,screenY | use n°wallpaper [screenX,screenY]]"
	print "	dotwp"
	print "		Change de wallpaper"
	print "	dotwp add fichier-a-ajouter"
	print "		Permet d'ajouter un fichier a la liste."
	print "	dotwp change screenX,screenY"
	print "		Change une des image du wallpaper général"
	print "	dotwp use n°wallpaper [screenX,screenY]"
	print "		utilise un wallpaper par rapport a son numéro. si vous utilisé plusieurs screen, "
	print "		vous serez obligé de définir la position du screen a changer."
	print "	dotwp help"
	print "		affiche ce message"
	return

def usage():
	print "dotwp [add fichier-a-ajouter | change screenX,screenY | use n°wallpaper [screenX,screenY]]"
	print "faites 'dotwp help' pour plus d'aide"
	return

if len(sys.argv) > 1 and sys.argv[1] == "add": addtolist() 			## oui l'argument pour ajouter une ligne est add
elif len(sys.argv) > 1 and sys.argv[1] == "change":
	List,num = GetList()
	change()
elif len(sys.argv) > 1 and sys.argv[1] == "use":
	List,num = GetList()
	use()
elif len(sys.argv) > 1 and (sys.argv[1] == "help" or sys.argv[1] == "aide" or sys.argv[1] == "h" or sys.argv[1] == "-h" or sys.argv[1] == "-?") : help() ## pour avoir l'aide
elif len(sys.argv) > 1: usage()							## si il ne comprend pas la demande il affiche la liste des option possible mais sans aucune description
else:										## sinon le programe fauit ce qu'il a a faire
	List,num = GetList()							## on prand la ligne
	commands.getstatusoutput("gconftool-2 -t string -s /desktop/gnome/background/picture_filename '" + pathconfig + str(mergeimage(0,0,0,0)) + "'") ## et on exécute presque tout le reste du programme

Dernière modification par Akane`Mahoru (Le 23/07/2006, à 13:49)

Hors ligne

#3 Le 21/07/2006, à 19:46

lost-in-the-shell

Re : Programe de changement automatique du wallpaper [v0.4-2]

Il serait préférable à mon avis de créer un site sur Sourceforge / Tuxfamily au lieu de tout poster ici. M'enfin bon, je dis ça, je dis rien...


Linux user #401253 - Ubuntu user #3023 .
Nick sur IRC : naji.
Pensez à adhérer au Comité de lutte contre le SMS.

Hors ligne

#4 Le 21/07/2006, à 20:14

Mahoru`Tsunemi

Re : Programe de changement automatique du wallpaper [v0.4-2]

Hum,  si on me le fait je veux bien smile
a sourceforge plutot smile

Hors ligne

#5 Le 23/07/2006, à 04:11

Mahoru`Tsunemi

Re : Programe de changement automatique du wallpaper [v0.4-2]

Je compte bientôt me lancer dans une interface graphique.
j'hésite a la faire en tk ou gtk. quelqu'un peut m'aider sur ce choix ?

Hors ligne

#6 Le 23/07/2006, à 16:20

lost-in-the-shell

Re : Programe de changement automatique du wallpaper [v0.4-2]

Programme optimisé pour Gnome --> pour des Gnomiens majoritairement --> GTK conseillé (en plus ça a l'air fastoche comme lib).


Linux user #401253 - Ubuntu user #3023 .
Nick sur IRC : naji.
Pensez à adhérer au Comité de lutte contre le SMS.

Hors ligne

#7 Le 23/07/2006, à 17:55

Mahoru`Tsunemi

Re : Programe de changement automatique du wallpaper [v0.4-2]

après petite discutions avec moi même c'est ce que j'avais pansé.
dans tout les cas pyQt était déjà exclus wink

Hors ligne

#8 Le 26/07/2006, à 00:52

Mahoru`Tsunemi

Re : Programe de changement automatique du wallpaper [v0.4-2]

Comme je n'ai pas du le mettre, si vous faites la liste vous même, il faut le chemin de l'image.Même si l'image est dans le même répertoire que le script.

Mais dans tout les cas je vous conseille d'utiliser la fonction add. Elle vérifie si l'image pourra être utiliser par la PIL et vous savez comme ça si elle marchera.

Hors ligne