user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 21-11-2014 14:08:50

IceF0x
#! Gourou Linux

Projet Handy-personnal-theme

Actuellement, avec manon on a en tête de créer un utilitaire afin de faciliter le theming sur HandyLinux, je vais déjà posté le début de mes idée et bout de code, le topic sera édité au fur et à mesure.

Voici le graphique que j'ai créer avec DIA, oui c'est moche mais je ne suis pas expert de l'utilisation de DIA lol

1416571385_handy-tunnig.png

Et voici 2 petits bout de code:

Celui du test de l'environnement de bureau:

1416571496_capture_d_ecran_-_201114_-_11_25_12.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk

def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
  else:
    #execution de l'application 

DE_DETECT()

Celui de l'accueil de l'application:

1416571725_capture_d_ecran_-_211114_-_13_14_05.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import gtk

class Application():
 
    def __init__(self):
        self.window = gtk.Window()
        self.window.set_default_size(300, 160)
        self.window.set_title("Handy-Tunning")
        self.window.set_position(gtk.WIN_POS_CENTER)
        self.window.set_border_width(15)
        self.create_widgets()
        self.connect_signals()
 
        self.window.show_all()
        gtk.main()

    def create_widgets(self):
        self.vbox = gtk.VBox(spacing=10)
        accueil = '''        Attention ! 

        Handy-Tunning va completement modifier   
        l'apparence de votre système.
        Utilisez le en toute connaissance de cause. 

        Pour continuer cliquez sur Suivant.  
        '''
        self.label = gtk.Label(accueil)
        self.hbox_2 = gtk.HBox(spacing=100)
        self.button_exit = gtk.Button("Annuler")
        self.hbox_2.pack_start(self.button_exit)
        self.button_ok = gtk.Button("Suivant")
        self.hbox_2.pack_start(self.button_ok)
 
        self.vbox.pack_start(self.label)
        self.vbox.pack_end(self.hbox_2, False, False, 4)
 
        self.window.add(self.vbox)
 
 
    def connect_signals(self):
        self.button_ok.connect("clicked", self.callback_ok)
        self.button_exit.connect("clicked", self.callback_exit)
 
 
    def callback_ok(self, widget, callback_data=None):
        # code de la fenetre suivante...
        gtk.main_quit()
 
    def callback_exit(self, widget, callback_data=None):
        gtk.main_quit()
 
 
if __name__ == "__main__":
    app = Application()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#2 21-11-2014 20:34:33

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

hihi !!! beau projet pleins d'ambition  big_smile

Hors ligne

#3 24-11-2014 12:29:07

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Bon ben j'ai trop de souci pour créer l'assistant tout à la main, je pense que je vais me pencher sur glade avec le module assistant.

j'ai un tuto de base ici:

http://www.irizone.net/irizone5/applica … _assistant

Je verrai comment ça se passe avec.

Je vais aussi regarder dans les sources de pncconf pour m'aider


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#4 29-11-2014 00:45:04

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Mise à jour du code

1417214184.png

1417214222.png

1417214261.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

#settings = gtk.settings_get_default()
#theme = settings.get_property("gtk-theme-name")
#icons = settings.get_property("gtk-icon-theme-name")
#font = settings.get_property("gtk-font-name")

gobject.threads_init()
BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/") 
FULL_CONFIG = ['.bashrc', '.config/openbox/menu.xml']

theme_config = {".gtkrc-2.0":HOME_FOLDER+'/.gtkrc-2.0',
			"compton.conf":HOME_FOLDER+"/.config/compton.conf",
			"rc.xml":HOME_FOLDER+"/.config/openbox/rc.xml",
			"autostart":HOME_FOLDER+"/.config/openbox/autostart"}

newFichier, gtkConf = {}, {}

chdir(HOME_FOLDER)

if os.path.isdir("themesHL") != True: #si le dossier n'est pas présent
	os.mkdir("themesHL") #on créer le dossier
		
chdir(EMPLACEMENT)


def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()



class Assistant:
    def __init__(self):        
        assistant = gtk.Assistant()
        assistant.set_title("Handy-Tunning")
        assistant.set_position(gtk.WIN_POS_CENTER)
        assistant.set_default_size(300, 260)
        assistant.connect("apply", self.button_pressed, "Apply")
        assistant.connect("cancel", self.button_pressed, "Cancel")
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        page = assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Avertissement !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
        #button = gtk.Button("À propos")
        #button.set_size_request(30,20)
        label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        #vbox.pack_start(button, False, False, 0)
        assistant.set_page_complete(vbox, True)
        
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Configuration !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
        label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème.")
        label.set_line_wrap(True)
        filechooserbutton = gtk.FileChooserButton("Select A File", None)
        #rbutton1 = gtk.RadioButton(None, "Importer votre thème")
        rbutton2 = gtk.RadioButton(None, "Exporter votre thème")
        cbutton = gtk.CheckButton("Importer le fond d'écran")  
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(filechooserbutton, True, True, 0)
        vbox.pack_start(rbutton2, False, False, 0)
        vbox.pack_start(cbutton, False, False, 0)
        assistant.set_page_complete(vbox, True)
        
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Votre thème à été restauré avec succès.")
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        assistant.set_page_complete(vbox, True)
        assistant.show_all()

    def listeTheme(self, listeDeroulante):
	'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
	themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
	for theme in themes_dispo:
		listeDeroulante.append_text(theme)
    
    def button_pressed(self, assistant, button):
        print "%s button pressed" % button
        gtk.main_quit()

Assistant()
gtk.main()

1417215931.png

#!/usr/bin/env python

import gtk

class AboutDialog():
    def __init__(self):
        aboutdialog = gtk.AboutDialog()
        aboutdialog.set_name("Handy-Personnal-Theme")
        aboutdialog.set_version("1.0.0")
        aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
        aboutdialog.set_website("http://www.handylinux.org/")
        aboutdialog.set_website_label("HandyLinux Website")
        aboutdialog.set_authors(["coyotus & manon"])

        aboutdialog.run()
        aboutdialog.destroy()

AboutDialog()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#5 03-12-2014 12:53:09

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

Bon j'ai quand même bosser un peu sur l'interface sans gtk.Assistant()
1417603821.png 1417603860.png

1417603915.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/")

gobject.threads_init()

if os.path.isdir(EMPLACEMENT) != True: #si le dossier n'est pas présent
	os.mkdir(EMPLACEMENT) #on créer le dossier
	
chdir(EMPLACEMENT)

def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()


class HandyTheme():
	
	def __init__(self):
		
		fenetre = gtk.Window()
		fenetre.set_title("Handy_Tuning")
		fenetre.connect("destroy", self.Quitter)
		
		# Creation VBox Principal contiendra la VBox ACCUEIL et la VBox CONFIGURATION
		vboxPRINCIPAL = gtk.VBox()
		
		# Creation VBox d'accueil (contiendra: etiquette Accueil + HBox ACCEUIL)
		vboxACCUEIL = gtk.VBox() 
		
		#Création d'une étiquette ACUEIL
		etiquetteACCUEIL = gtk.Label() 
		etiquetteACCUEIL.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\n  va completement modifier l'apparence de votre système. \n  Utilisez le en toute connaissance de cause.\n\n") 
		etiquetteACCUEIL.set_justify(gtk.JUSTIFY_CENTER) #Change la position du texte. Choix posibles (gtk.JUSTIFY_LEFT (défaut), gtk.JUSTIFY_RIGHT, gtk.JUSTIFY_CENTER, gtk.JUSTIFY_FILL)
		etiquetteACCUEIL.set_use_markup(True) #Utiliser la mise en forme
		etiquetteACCUEIL.show() 
		
		# Creation HBox ACCUEIL (contiendra :bouton AccueilANNULER+ bouton Info + bouton SuivantAccueil)
		hboxACCUEIL = gtk.HBox()# Va contenir (boutonAccueilANNULER+ boutonInfo + boutonSuivantAccueil)
		
		# creation des boutons
		boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
		boutonAccueilANNULER = gtk.Button(stock = gtk.STOCK_CANCEL)
		boutonSuivantAccueil = gtk.Button(stock = gtk.STOCK_GO_FORWARD)
		boutonInfo.show() 
		boutonAccueilANNULER.show()                       
		boutonSuivantAccueil.show()
		
		# INtegration boutons dans hbox d'accueil
		hboxACCUEIL.add(boutonAccueilANNULER)
		hboxACCUEIL.add(boutonInfo)
		hboxACCUEIL.add(boutonSuivantAccueil)
		hboxACCUEIL.show()
		
		# Integration de l'etiquette etla HBOX (qui contient les boutons) dans la VBox accueil
		vboxACCUEIL.add(etiquetteACCUEIL)
		vboxACCUEIL.add(hboxACCUEIL)
		vboxACCUEIL.show()
		
		# VBox Configuration va contenir (etiquette CONFIGURATION, vbox CONFIGURATION, hbox NAVIGATION )
		vboxCONFIGURATION = gtk.VBox()
		
		# creation etiquette CONFIGURATION
		etiquetteCONFIGURATION = gtk.Label() 
		etiquetteCONFIGURATION.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\nSelectionnez votre option et cliquez sur Suivant")
		etiquetteCONFIGURATION.set_justify(gtk.JUSTIFY_CENTER)
		etiquetteCONFIGURATION.set_use_markup(True)
		etiquetteCONFIGURATION.show()
		
		#creation liste deroulante
		listeDeroulante = gtk.combo_box_new_text()
		listeDeroulante.append_text('Thémes Disponible')
		listeDeroulante.set_active(0)
		listeDeroulante.set_wrap_width(0)
		self.listeTheme(listeDeroulante) # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
		listeDeroulante.show()
		
		# HBox NAVIGATION  (va contenir Les boutons de navigation(ANNULER, RETOUR, SUIVANT)
		hboxNAVIGATION= gtk.HBox() 
		
		#creation des boutons
		boutonANNULER = gtk.Button(stock = gtk.STOCK_CANCEL)
		boutonSuivantConfiguration = gtk.Button(stock = gtk.STOCK_GO_FORWARD)
		boutonPrecedent = gtk.Button(stock = gtk.STOCK_GO_BACK)
		boutonANNULER.show()
		boutonSuivantConfiguration.show()
		boutonPrecedent.show()
		
		# INtegration des boutons dans le HBox NAVIGATION
		hboxNAVIGATION.add(boutonANNULER)
		hboxNAVIGATION.add(boutonPrecedent)
		hboxNAVIGATION.add(boutonSuivantConfiguration)
		hboxNAVIGATION.show()
		
		# Integration des elements dans la VBox CONFIGURATION
		vboxCONFIGURATION.add(etiquetteCONFIGURATION)
		vboxCONFIGURATION.add(listeDeroulante)
		# Integration HBox NAVIGATION ( boutonANNULER + boutonPRECEDENT + boutonSUIVANT CONFIGURATION)
		vboxCONFIGURATION.pack_end(hboxNAVIGATION, False, False, 2) 
		
		# Integration des 2 Vbox (accueil etconfiguration) dans le VBox PRINCIPAL 
		vboxPRINCIPAL.add(vboxACCUEIL)
		vboxPRINCIPAL.add(vboxCONFIGURATION)
		vboxPRINCIPAL.show()
		
		#connection des boutons
		boutonSuivantAccueil.connect("clicked",self.on_suivant_accueil_clicked, 
		                                    vboxACCUEIL, vboxCONFIGURATION)
		                                    
		boutonAccueilANNULER.connect("clicked", self.Quitter)
		boutonANNULER.connect("clicked", self.Quitter)
		boutonPrecedent.connect("clicked", self.on_precedent_clicked,
		                                    vboxACCUEIL, vboxCONFIGURATION) 
		boutonInfo.connect("clicked", self.on_info_clicked)
		
		#Integration VBox PRINCIPAL dans la fenetre                                 
		fenetre.add(vboxPRINCIPAL)
		fenetre.show()
		
	def Quitter(self, widget):
		gtk.main_quit()
		
	def listeTheme(self, listeDeroulante):
		'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
		themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
		for theme in themes_dispo:
			listeDeroulante.append_text(theme)
					
	def on_suivant_accueil_clicked(self, widget, vboxACCUEIL, vboxCONFIGURATION):
		''' On cache vboxACCUEIL et affiche vboxCONFIGURATION '''
		vboxACCUEIL.hide()
		vboxCONFIGURATION.show()
		
	def on_precedent_clicked(self, widget, vboxACCUEIL, vboxCONFIGURATION):
		''' On cache vboxCONFIGURATION et affiche vboxACCUEIL '''
		vboxCONFIGURATION.hide()
		vboxACCUEIL.show()
		
	def on_info_clicked(self, widget):
		''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
		aboutdialog = gtk.AboutDialog()
		aboutdialog.set_name("Handy-Tuning")
		aboutdialog.set_version("1.0.0")
		aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
		aboutdialog.set_website("http://www.handylinux.org/")
		aboutdialog.set_website_label("HandyLinux Website")
		aboutdialog.set_authors(["coyotus & manon"])
		aboutdialog.run()
		aboutdialog.destroy()				
		
if __name__ == "__main__":
	HandyTheme()
	gtk.main()
		
		

Hors ligne

#6 03-12-2014 15:17:11

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

GG manon, je regarde tout ça chez moi ce soir, j'ai rajouter 2 petites option centrer la fenêtre et l'écartement des boutons.

1417612613_capture_d_ecran_-_031214_-_14_21_53.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/")

gobject.threads_init()

if os.path.isdir(EMPLACEMENT) != True: #si le dossier n'est pas présent
	os.mkdir(EMPLACEMENT) #on créer le dossier
	
chdir(EMPLACEMENT)

def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()


class HandyTheme():
	
	def __init__(self):
		
		fenetre = gtk.Window()
		fenetre.set_title("Handy_Tuning")
		fenetre.connect("destroy", self.Quitter)
		fenetre.set_position(gtk.WIN_POS_CENTER)
		fenetre.set_border_width(5)
		# Creation VBox Principal contiendra la VBox ACCUEIL et la VBox CONFIGURATION
		vboxPRINCIPAL = gtk.VBox()
		
		# Creation VBox d'accueil (contiendra: etiquette Accueil + HBox ACCEUIL)
		vboxACCUEIL = gtk.VBox() 
		
		#Création d'une étiquette ACUEIL
		etiquetteACCUEIL = gtk.Label() 
		etiquetteACCUEIL.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\n  va completement modifier l'apparence de votre système. \n  Utilisez le en toute connaissance de cause.\n\n") 
		etiquetteACCUEIL.set_justify(gtk.JUSTIFY_CENTER) #Change la position du texte. Choix posibles (gtk.JUSTIFY_LEFT (défaut), gtk.JUSTIFY_RIGHT, gtk.JUSTIFY_CENTER, gtk.JUSTIFY_FILL)
		etiquetteACCUEIL.set_use_markup(True) #Utiliser la mise en forme
		etiquetteACCUEIL.show() 
		
		# Creation HBox ACCUEIL (contiendra :bouton AccueilANNULER+ bouton Info + bouton SuivantAccueil)
		hboxACCUEIL = gtk.HBox(spacing=10)# Va contenir (boutonAccueilANNULER+ boutonInfo + boutonSuivantAccueil)
		
		# creation des boutons
		boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
		boutonAccueilANNULER = gtk.Button(stock = gtk.STOCK_CANCEL)
		boutonSuivantAccueil = gtk.Button(stock = gtk.STOCK_GO_FORWARD)
		boutonInfo.show() 
		boutonAccueilANNULER.show()                       
		boutonSuivantAccueil.show()
		
		# INtegration boutons dans hbox d'accueil
		hboxACCUEIL.add(boutonAccueilANNULER)
		hboxACCUEIL.add(boutonInfo)
		hboxACCUEIL.add(boutonSuivantAccueil)
		hboxACCUEIL.show()
		
		# Integration de l'etiquette etla HBOX (qui contient les boutons) dans la VBox accueil
		vboxACCUEIL.add(etiquetteACCUEIL)
		vboxACCUEIL.add(hboxACCUEIL)
		vboxACCUEIL.show()
		
		# VBox Configuration va contenir (etiquette CONFIGURATION, vbox CONFIGURATION, hbox NAVIGATION )
		vboxCONFIGURATION = gtk.VBox()
		
		# creation etiquette CONFIGURATION
		etiquetteCONFIGURATION = gtk.Label() 
		etiquetteCONFIGURATION.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\nSelectionnez votre option et cliquez sur Suivant\n")
		etiquetteCONFIGURATION.set_justify(gtk.JUSTIFY_CENTER)
		etiquetteCONFIGURATION.set_use_markup(True)
		etiquetteCONFIGURATION.show()
		
		#creation liste deroulante
		listeDeroulante = gtk.combo_box_new_text()
		listeDeroulante.append_text('Thémes Disponible')
		listeDeroulante.set_active(0)
		listeDeroulante.set_wrap_width(0)
		self.listeTheme(listeDeroulante) # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
		listeDeroulante.show()
		
		# HBox NAVIGATION  (va contenir Les boutons de navigation(ANNULER, RETOUR, SUIVANT)
		hboxNAVIGATION= gtk.HBox()
		
		#creation des boutons
		boutonANNULER = gtk.Button(stock = gtk.STOCK_CANCEL)
		boutonSuivantConfiguration = gtk.Button(stock = gtk.STOCK_GO_FORWARD)
		boutonPrecedent = gtk.Button(stock = gtk.STOCK_GO_BACK)
		boutonANNULER.show()
		boutonSuivantConfiguration.show()
		boutonPrecedent.show()
		
		# INtegration des boutons dans le HBox NAVIGATION
		hboxNAVIGATION.add(boutonANNULER)
		hboxNAVIGATION.add(boutonPrecedent)
		hboxNAVIGATION.add(boutonSuivantConfiguration)
		hboxNAVIGATION.show()
		
		# Integration des elements dans la VBox CONFIGURATION
		vboxCONFIGURATION.add(etiquetteCONFIGURATION)
		vboxCONFIGURATION.add(listeDeroulante)
		# Integration HBox NAVIGATION ( boutonANNULER + boutonPRECEDENT + boutonSUIVANT CONFIGURATION)
		vboxCONFIGURATION.pack_end(hboxNAVIGATION, False, False, 2) 
		
		# Integration des 2 Vbox (accueil etconfiguration) dans le VBox PRINCIPAL 
		vboxPRINCIPAL.add(vboxACCUEIL)
		vboxPRINCIPAL.add(vboxCONFIGURATION)
		vboxPRINCIPAL.show()
		
		#connection des boutons
		boutonSuivantAccueil.connect("clicked",self.on_suivant_accueil_clicked, 
		                                    vboxACCUEIL, vboxCONFIGURATION)
		                                    
		boutonAccueilANNULER.connect("clicked", self.Quitter)
		boutonANNULER.connect("clicked", self.Quitter)
		boutonPrecedent.connect("clicked", self.on_precedent_clicked,
		                                    vboxACCUEIL, vboxCONFIGURATION) 
		boutonInfo.connect("clicked", self.on_info_clicked)
		
		#Integration VBox PRINCIPAL dans la fenetre                                 
		fenetre.add(vboxPRINCIPAL)
		fenetre.show()
		
	def Quitter(self, widget):
		gtk.main_quit()
		
	def listeTheme(self, listeDeroulante):
		'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
		themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
		for theme in themes_dispo:
			listeDeroulante.append_text(theme)
					
	def on_suivant_accueil_clicked(self, widget, vboxACCUEIL, vboxCONFIGURATION):
		''' On cache vboxACCUEIL et affiche vboxCONFIGURATION '''
		vboxACCUEIL.hide()
		vboxCONFIGURATION.show()
		
	def on_precedent_clicked(self, widget, vboxACCUEIL, vboxCONFIGURATION):
		''' On cache vboxCONFIGURATION et affiche vboxACCUEIL '''
		vboxCONFIGURATION.hide()
		vboxACCUEIL.show()
		
	def on_info_clicked(self, widget):
		''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
		aboutdialog = gtk.AboutDialog()
		aboutdialog.set_position(gtk.WIN_POS_CENTER)
		aboutdialog.set_name("Handy-Tuning")
		aboutdialog.set_version("1.0.0")
		aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
		aboutdialog.set_website("http://www.handylinux.org/")
		aboutdialog.set_website_label("HandyLinux Website")
		aboutdialog.set_authors(["\tcoyotus & manon\nUnder licence GPLv3\n http://www.gnu.org/licenses/gpl.txt"])
		aboutdialog.run()
		aboutdialog.destroy()				
		
if __name__ == "__main__":
	HandyTheme()
	gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#7 03-12-2014 15:39:12

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

Parfait  big_smile  J'ai fais là même pour le hbox Navigation du coup wink
J serais pas dispo csoir , on essai de se capter demain soir ?
ligne 101

hboxNAVIGATION= gtk.HBox(spacing=10)

Hors ligne

#8 03-12-2014 23:42:28

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

J'ai encore un peu chipoté avec gtk.assistant()

1417642924_capture_d_ecran_-_03122014_-_22_40_02.png

1417642941_capture_d_ecran_-_03122014_-_22_40_17.png

1417642967_capture_d_ecran_-_03122014_-_22_40_46.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

#settings = gtk.settings_get_default()
#theme = settings.get_property("gtk-theme-name")
#icons = settings.get_property("gtk-icon-theme-name")
#font = settings.get_property("gtk-font-name")

gobject.threads_init()
BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/") 
FULL_CONFIG = ['.bashrc', '.config/openbox/menu.xml']
twidget = gtk.EXPAND | gtk.FILL | gtk.SHRINK
theme_config = {".gtkrc-2.0":HOME_FOLDER+'/.gtkrc-2.0',
			"compton.conf":HOME_FOLDER+"/.config/compton.conf",
			"rc.xml":HOME_FOLDER+"/.config/openbox/rc.xml",
			"autostart":HOME_FOLDER+"/.config/openbox/autostart"}

newFichier, gtkConf = {}, {}

chdir(HOME_FOLDER)

if os.path.isdir("themesHL") != True: #si le dossier n'est pas présent
	os.mkdir("themesHL") #on créer le dossier
		
chdir(EMPLACEMENT)


def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()



class Assistant:
    def __init__(self):        
        assistant = gtk.Assistant()
	progressbar = gtk.ProgressBar(None)
        assistant.set_title("Handy-Tunning")
        assistant.set_position(gtk.WIN_POS_CENTER)
        assistant.set_default_size(300, 260)
        assistant.connect("close", self.button_pressed, "Close")
        assistant.connect("cancel", self.button_pressed, "Cancel")
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        page = assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Avertissement !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
        #button = gtk.Button("À propos")
        #button.set_size_request(30,20)
        label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        #vbox.pack_start(button, False, False, 0)
        assistant.set_page_complete(vbox, True)
        
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Configuration !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
        label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème et cliquez sur Suivant.")
        label.set_line_wrap(True)
	checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
	checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
	checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
	checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(checkOptionSAVE, True, True, 0)
        vbox.pack_start(checkOptionCHANGE, True, True, 0)
        vbox.pack_start(checkOptionIMPORT, True, True, 0)
	vbox.pack_start(checkOptionEXPORT, True, True, 0)
        assistant.set_page_complete(vbox, True)

        vbox = gtk.VBox()
        table = gtk.Table(2, 2, True) 
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Handy-Tunning !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_PROGRESS)
        label = gtk.Label("Vous avez choisi l'option : Choisir un thème disponible\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n")
	#creation liste deroulante
	listeDeroulante = gtk.combo_box_new_text()
	listeDeroulante.append_text('Thémes Disponible')
	listeDeroulante.set_active(0)
	listeDeroulante.set_wrap_width(0)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(listeDeroulante, True, True, 0)
	self.listeTheme(listeDeroulante) # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
        label.set_line_wrap(True)
        assistant.set_page_complete(vbox, True)
        
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("Votre thème à été restauré avec succès.\n\n\n\n")
	boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
	boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()

    def listeTheme(self, listeDeroulante):
	'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
	themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
	for theme in themes_dispo:
		listeDeroulante.append_text(theme)

    def on_info_clicked(self, widget):
	''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
	aboutdialog = gtk.AboutDialog()
	aboutdialog.set_position(gtk.WIN_POS_CENTER)
	aboutdialog.set_name("Handy-Tuning")
	aboutdialog.set_version("1.0.0")
	aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
	aboutdialog.set_website("http://www.handylinux.org/")
	aboutdialog.set_website_label("HandyLinux Website")
	aboutdialog.set_authors(["\tHandy-Tunning  Copyright (C) 2014\n\t\t\tManon & coyotus\nThis program comes with ABSOLUTELY\nNO WARRANTY for details see\n\thttp://www.gnu.org/licenses/gpl.txt \nThis is free software, and you are welcome\nto redistribute it under certain conditions."])
	aboutdialog.run()
	aboutdialog.destroy()
    
    def button_pressed(self, assistant, button):
        print "%s button pressed" % button
        gtk.main_quit()

Assistant()
gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#9 04-12-2014 02:20:52

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

Ok , bon je comprend pas bien comment tu récupére l'option choisi ? La ton bouton suivant va afficher une nouvelle page. ( Avec la liste déroulante )
Quand est t'il si c'est une autre option ? Tu affichera toujours la même page ...

Mon bouton suivant récupére le bouton check active et de là peut s'avoir l'option choisi et donc quoi afficher dans la fenetre : un label ou un autre label + liste déroulante ou gtk.FileChooserButton .

Je comprend pas comment passé des infos avec  gtk Assistant....

EDIT:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/")

gobject.threads_init()

if os.path.isdir(EMPLACEMENT) != True: #si le dossier n'est pas présent
	os.mkdir(EMPLACEMENT) #on créer le dossier
	
chdir(EMPLACEMENT)

def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()


class HandyTheme():
	
	def __init__(self):
		
		fenetre = gtk.Window()
		fenetre.set_title("Handy_Tuning")
		fenetre.connect("destroy", self.Quitter)
		fenetre.set_position(gtk.WIN_POS_CENTER)
		fenetre.set_border_width(5)
		# Creation VBox Principal contiendra la VBox ACCUEIL et la VBox CONFIGURATION
		vboxPRINCIPAL = gtk.VBox()
		
		# Creation VBox d'accueil (contiendra: etiquette Accueil + HBox ACCEUIL)
		vboxACCUEIL = gtk.VBox() 
		
		#Création d'une étiquette ACUEIL
		etiquetteACCUEIL = gtk.Label() 
		etiquetteACCUEIL.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\n  va completement modifier l'apparence de votre système. \n  Utilisez le en toute connaissance de cause.\n\n") 
		etiquetteACCUEIL.set_justify(gtk.JUSTIFY_CENTER) #Change la position du texte. Choix posibles (gtk.JUSTIFY_LEFT (défaut), gtk.JUSTIFY_RIGHT, gtk.JUSTIFY_CENTER, gtk.JUSTIFY_FILL)
		etiquetteACCUEIL.set_use_markup(True) #Utiliser la mise en forme
		etiquetteACCUEIL.show() 
		
		# Creation HBox ACCUEIL (contiendra :bouton AccueilANNULER+ bouton Info + bouton SuivantAccueil)
		hboxACCUEIL = gtk.HBox(spacing=10)# Va contenir (boutonAccueilANNULER+ boutonInfo + boutonSuivantAccueil)
		
		# creation des boutons ACCUEIL 
		boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
		boutonAccueilANNULER = gtk.Button(stock = gtk.STOCK_CANCEL)
		boutonSuivantAccueil = gtk.Button(stock = gtk.STOCK_GO_FORWARD)
		# creation liste boutons ACCUEIL
		listeButtonACCUEIL = [boutonAccueilANNULER, boutonInfo, boutonSuivantAccueil]
		for button in listeButtonACCUEIL:
			# INtegration boutons dans hbox d'accueil
			button.show()
			hboxACCUEIL.add(button)
		hboxACCUEIL.show()
		
		# Integration de l'etiquette etla HBOX (qui contient les boutons) dans la VBox accueil
		vboxACCUEIL.add(etiquetteACCUEIL)
		vboxACCUEIL.pack_end(hboxACCUEIL, False, False, 2)
		vboxACCUEIL.show()
		
		# VBox Configuration va contenir (etiquette CONFIGURATION, vbox CONFIGURATION, hbox NAVIGATION )
		vboxCONFIGURATION = gtk.VBox()
		
		# creation etiquette CONFIGURATION
		etiquetteCONFIGURATION = gtk.Label() 
		etiquetteCONFIGURATION.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\nSelectionnez votre option et cliquez sur Suivant\n")
		etiquetteCONFIGURATION.set_justify(gtk.JUSTIFY_CENTER)
		etiquetteCONFIGURATION.set_use_markup(True)
		etiquetteCONFIGURATION.show()
		
		# creation des boutons check Option  (gtk.CheckButton)
		checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
		checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
		checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
		checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
		# Gestion des boutons dans une liste
		listeBoutonCheck = [checkOptionSAVE, checkOptionCHANGE, checkOptionIMPORT, checkOptionEXPORT]
		for bouton in listeBoutonCheck:
			bouton.show()
			bouton.connect("clicked", self.on_check_option_clicked, listeBoutonCheck)
		
		#creation liste deroulante
		self.listeDeroulante = gtk.combo_box_new_text()
		self.listeDeroulante.append_text('Thémes Disponible')
		self.listeDeroulante.set_active(0)
		self.listeDeroulante.set_wrap_width(0)
		self.listeTheme(self.listeDeroulante) # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
		
		# HBox NAVIGATION  (va contenir Les boutons de navigation(ANNULER, RETOUR, SUIVANT)
		hboxNAVIGATION= gtk.HBox(spacing=10)
		
		#creation des boutons NAVIGATION
		boutonANNULER = gtk.Button(stock = gtk.STOCK_CANCEL)
		self.boutonSuivantConfiguration = gtk.Button(stock = gtk.STOCK_GO_FORWARD)
		self.boutonPrecedent = gtk.Button(stock = gtk.STOCK_GO_BACK)
		self.boutonPrecedentValidation = gtk.Button(stock = gtk.STOCK_GO_BACK)
		self.BoutonApply = gtk.Button(stock = gtk.STOCK_APPLY)
		# creation liste bouton NAVIGATION
		listeBoutonNAVIGATION = [boutonANNULER, self.boutonPrecedent, self.boutonPrecedentValidation, self.boutonSuivantConfiguration,  self.BoutonApply]
		for bouton in listeBoutonNAVIGATION:
			# INtegration des boutons dans le HBox NAVIGATION
			hboxNAVIGATION.add(bouton)
			bouton.show()
		# On cache les boutons qui servent a la validation
		listeBoutonNAVIGATION[-1].hide()
		listeBoutonNAVIGATION[2].hide()
		
		hboxNAVIGATION.show()
		
		# Integration des elements dans la VBox CONFIGURATION
		vboxCONFIGURATION.add(etiquetteCONFIGURATION)
		vboxCONFIGURATION.add(checkOptionSAVE)
		vboxCONFIGURATION.add(checkOptionCHANGE)
		vboxCONFIGURATION.add(checkOptionIMPORT)
		vboxCONFIGURATION.add(checkOptionEXPORT)
		vboxCONFIGURATION.add(self.listeDeroulante)
		
		# Integration HBox NAVIGATION ( boutonANNULER + boutonPRECEDENT + boutonSUIVANT CONFIGURATION)
		vboxCONFIGURATION.pack_end(hboxNAVIGATION, False, False, 2) 
		
		# Integration des 2 Vbox (accueil etconfiguration) dans le VBox PRINCIPAL 
		vboxPRINCIPAL.add(vboxACCUEIL)
		vboxPRINCIPAL.add(vboxCONFIGURATION)
		vboxPRINCIPAL.show()
		
		#connection des boutons
		boutonSuivantAccueil.connect("clicked",self.on_suivant_accueil_clicked, 
		                                    vboxACCUEIL, vboxCONFIGURATION)                                    
		boutonAccueilANNULER.connect("clicked", self.Quitter)
		boutonANNULER.connect("clicked", self.Quitter)
		self.boutonPrecedent.connect("clicked", self.on_precedent_clicked,
		                                    vboxACCUEIL, vboxCONFIGURATION) 
		boutonInfo.connect("clicked", self.on_info_clicked)
		self.boutonSuivantConfiguration.connect("clicked", self.on_suivantCONFIGURATION_clicked, 
		                                        listeBoutonCheck, etiquetteCONFIGURATION)
		self.boutonPrecedentValidation.connect("clicked", self.on_precedentVALIDATION_clicked, listeBoutonCheck, etiquetteCONFIGURATION)
		
		#Integration VBox PRINCIPAL dans la fenetre                                 
		fenetre.add(vboxPRINCIPAL)
		fenetre.show()
		
	def Quitter(self, widget):
		gtk.main_quit()
		
	def listeTheme(self, listeDeroulante):
		'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
		themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
		for theme in themes_dispo:
			listeDeroulante.append_text(theme)
					
	def on_suivant_accueil_clicked(self, widget, vboxACCUEIL, vboxCONFIGURATION):
		''' On cache vboxACCUEIL et affiche vboxCONFIGURATION '''
		vboxACCUEIL.hide()
		vboxCONFIGURATION.show()
		
	def on_precedent_clicked(self, widget, vboxACCUEIL, vboxCONFIGURATION):
		''' On cache vboxCONFIGURATION et affiche vboxACCUEIL '''
		vboxCONFIGURATION.hide()
		vboxACCUEIL.show()
		
	def on_info_clicked(self, widget):
		''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
		aboutdialog = gtk.AboutDialog()
		aboutdialog.set_position(gtk.WIN_POS_CENTER)
		aboutdialog.set_name("Handy-Tuning")
		aboutdialog.set_version("1.0.0")
		aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
		aboutdialog.set_website("http://www.handylinux.org/")
		aboutdialog.set_website_label("HandyLinux Website")
		aboutdialog.set_authors(["\tcoyotus & manon\nUnder licence GPLv3\n http://www.gnu.org/licenses/gpl.txt"])
		aboutdialog.run()
		aboutdialog.destroy()
			
	def on_check_option_clicked(self, widget, listeBoutonCheck):
		''' Active le bouton et desactive les autres '''
		if widget.get_active():
			for bouton in listeBoutonCheck:
				if bouton == widget:
					pass
				elif bouton != widget:
					bouton.set_active(False)
						
	def on_suivantCONFIGURATION_clicked(self, widget, listeBoutonCheck,etiquetteCONFIGURATION):
		option = " "
		dicOptions = {'Sauvegarder votre Configuration': ('Cliquez sur Appliquer pour enregistrer', ''),
		                'Choisir un thème disponible': ("Selectionnez le thème à appliquer \net cliquez sur Appliquer", 'choice'),
		                'Importer un thème télécharger': ("Selectionnez le thème a importer \net cliquez sur Appliquer", 'import'),
		                'Exporter votre thème actuel': ("Exporter votre thème au format tar.gz", 'export')}
		widget.hide()
		self.boutonPrecedent.hide()
		self.boutonPrecedentValidation.show()
		self.BoutonApply.show()
		
		# Recuperation valeur des boutons Option et suppression des bouton de l'affichage
		for bouton in listeBoutonCheck:
			bouton.hide()
			if bouton.get_active():
				option = bouton.get_label()
				etiquetteCONFIGURATION.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\n" + "Vous avez choisi l'option : " + option + "\n\n" + dicOptions[option][0])
				etiquetteCONFIGURATION.set_use_markup(True)
				if dicOptions[option][1] == 'choice':
					self.listeDeroulante.show()
				if dicOptions[option][1] == 'import':
					self.listeDeroulante.show()####################################
										
		if option == " ":
			etiquetteCONFIGURATION.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\nVous n'avez  pas choisi l'option !!!\n\nCliquez sur Précédent pour choisir une Option\n\n")
			etiquetteCONFIGURATION.set_use_markup(True)
			
	def on_precedentVALIDATION_clicked(self, widget, listeBoutonCheck,etiquetteCONFIGURATION):
		widget.hide()
		self.BoutonApply.hide()
		self.boutonPrecedent.show()
		etiquetteCONFIGURATION.set_text("\n<span size=\"xx-large\">Handy-Tuning </span>\n\nSelectionnez votre option et cliquez sur Suivant\n")
		etiquetteCONFIGURATION.set_justify(gtk.JUSTIFY_CENTER)
		etiquetteCONFIGURATION.set_use_markup(True)
		for bouton in listeBoutonCheck:
			bouton.show()
		self.boutonSuivantConfiguration.show()
		self.listeDeroulante.hide()
		
														
if __name__ == "__main__":
	HandyTheme()
	gtk.main()

Hors ligne

#10 04-12-2014 09:53:58

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

manon a écrit :

Ok , bon je comprend pas bien comment tu récupére l'option choisi ? La ton bouton suivant va afficher une nouvelle page. ( Avec la liste déroulante )
Quand est t'il si c'est une autre option ? Tu affichera toujours la même page ...

Mon bouton suivant récupére le bouton check active et de là peut s'avoir l'option choisi et donc quoi afficher dans la fenetre : un label ou un autre label + liste déroulante ou gtk.FileChooserButton .

Je comprend pas comment passé des infos avec  gtk Assistant....

Pour ça j'ai un modèle, je te filerai le lien ce soir si tu veux, j'ai juste regardé l'intégration, j'ai un peu travaillé dessus pour m'entrainer avec, j'ai encore chipoté mais je n'ai pas posté.
J'ai aussi fait des test avec ta version de fenêtre, mais je ne l'ai pas postée, je te montrerai le paste ce soir si tu veux, par contre j'ai un souci avec le bouton précédent, si je refait suivant il le compte comme un précédent aussi, alors qu'a la base c'est un suivant.

Je t'explique, dans la fenêtre ou on doit cocher les options, si je coche rien, j'ai la fenêtre d'erreur, je fais précédent, j'arrive à la première fenêtre et si je fait suivant à partir de là, elle retourne à la fenêtre qui me dit que j'ai pas coché les option et pas à la fenêtre des options.

C'est exactement ce souci que j'avais déjà quand j'ai essayé avant gtk.assistant() et si je force le passage, la fenêtre précédente reste en arrière plan.

Bref on verra tout ça ce soir, je vais regarder ton nouveau code et faire des test voir si je comprend mieux l'astuce.


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#11 04-12-2014 12:52:16

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

IceFox a écrit :

Je t'explique, dans la fenêtre ou on doit cocher les options, si je coche rien, j'ai la fenêtre d'erreur, je fais précédent, j'arrive à la première fenêtre et si je fait suivant à partir de là, elle retourne à la fenêtre qui me dit que j'ai pas coché les option et pas à la fenêtre des options.

Tu n'a pas tester mon nouveau code   tongue  , ça ne fais plus ça  wink Je me connecte sur IRC

Hors ligne

#12 04-12-2014 20:55:28

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Pour le moment j'en suis ici smile il me reste encore a régler quelques trucs mais ça avance smile

1417719184_capture_d_ecran_-_04122014_-_19_52_22.png

1417719290_capture_d_ecran_-_04122014_-_19_54_24.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

#settings = gtk.settings_get_default()
#theme = settings.get_property("gtk-theme-name")
#icons = settings.get_property("gtk-icon-theme-name")
#font = settings.get_property("gtk-font-name")

gobject.threads_init()
BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/") 
FULL_CONFIG = ['.bashrc', '.config/openbox/menu.xml']
twidget = gtk.EXPAND | gtk.FILL | gtk.SHRINK
theme_config = {".gtkrc-2.0":HOME_FOLDER+'/.gtkrc-2.0',
			"compton.conf":HOME_FOLDER+"/.config/compton.conf",
			"rc.xml":HOME_FOLDER+"/.config/openbox/rc.xml",
			"autostart":HOME_FOLDER+"/.config/openbox/autostart"}

newFichier, gtkConf = {}, {}

chdir(HOME_FOLDER)

if os.path.isdir("themesHL") != True: #si le dossier n'est pas présent
	os.mkdir("themesHL") #on créer le dossier
		
chdir(EMPLACEMENT)


def DE_DETECT():
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()
 
class Assistant:
    def __init__(self):
        assistant = gtk.Assistant()
        assistant.set_title("Handy-Tunning")
        assistant.set_position(gtk.WIN_POS_CENTER)
        assistant.connect("apply", self.button_pressed, "Apply")
        assistant.connect("cancel", self.button_pressed, "Cancel")
        assistant.connect("close", self.button_pressed, "Close")
        assistant.set_default_size( 400, 300 )
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        page = assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Avertissement !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
        label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        assistant.set_page_complete(vbox, True)
 
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Configuration !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
        label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème et cliquez sur Suivant.")
        label.set_line_wrap(True)
	self.checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
	self.checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
	self.checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
	self.checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(self.checkOptionSAVE, False, False, 0)
        vbox.pack_start(self.checkOptionCHANGE, False, False, 0)
        vbox.pack_start(self.checkOptionIMPORT, False, False, 0)
	vbox.pack_start(self.checkOptionEXPORT, False, False, 0)
	listeBoutonCheck = [self.checkOptionSAVE, self.checkOptionCHANGE, self.checkOptionIMPORT, self.checkOptionEXPORT]
	for bouton in listeBoutonCheck:
		bouton.show()
		bouton.connect("clicked", self.on_check_option_clicked, listeBoutonCheck)
        assistant.set_page_complete(vbox, True)

        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Erreur !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVous n'avez  pas choisi l'option !!!\n\nCliquez sur Précédent pour choisir une Option\n\n\n\n\n")
	boutonPrecedentValidation = gtk.Button(stock = gtk.STOCK_GO_BACK)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonPrecedentValidation, True, True, 0)
        assistant.set_page_complete(vbox, True)
	boutonPrecedentValidation.connect("clicked", self.on_precedent_clicked)
        assistant.show_all()

        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVotre thème à été sauvegardé avec succès.\n\n\n\n\n")
	boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
	boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()

        vbox = gtk.VBox()
        table = gtk.Table(2, 2, True) 
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Handy-Tunning !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Vous avez choisi l'option : Choisir un thème disponible\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
	#creation liste deroulante
	listeDeroulante = gtk.combo_box_new_text()
	listeDeroulante.append_text('Thémes Disponible')
	listeDeroulante.set_active(0)
	listeDeroulante.set_wrap_width(0)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(listeDeroulante, True, True, 0)
	self.listeTheme(listeDeroulante) # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
        label.set_line_wrap(True)
        assistant.set_page_complete(vbox, True)
 
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "fenetre exemple")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Vous avez choisi l'option : Importer un thème télécharger\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
        label.set_line_wrap(True)
        filechooserbutton = gtk.FileChooserButton("Select A File", None)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(filechooserbutton, True, True, 0)
        assistant.set_page_complete(vbox, True)
         
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVotre thème à été exporté avec succès.\n\n\n\n\n")
	boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
	boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()
        # Set an alternative function to return the next page to go to
        assistant.set_forward_page_func(self.pageforward)

    def on_check_option_clicked(self, widget, listeBoutonCheck):
	''' Active le bouton et desactive les autres '''
	if widget.get_active():
		for bouton in listeBoutonCheck:
			if bouton == widget:
				pass
			elif bouton != widget:
				bouton.set_active(False)
 
    def pageforward(self,page):
        """
        Function called when the forward button is pressed,
        Arguments:
            page:
                integer index of the current page
        returns:
            integer index of the next page to display
        """
        if page == 1 and self.checkOptionSAVE.get_active():
            return 3
        elif page == 1 and self.checkOptionCHANGE.get_active():
            return 4
        elif page == 1 and self.checkOptionIMPORT.get_active():
            return 5
        elif page == 1 and self.checkOptionEXPORT.get_active():
            return 6
        else:
            return page+1

    def on_precedent_clicked(self, page):
	''' On cache vboxCONFIGURATION et affiche vboxACCUEIL '''
        if page == 2:
            return 1

    def listeTheme(self, listeDeroulante):
	'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
	themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
	for theme in themes_dispo:
		listeDeroulante.append_text(theme)
 
    def button_pressed(self, assistant, button):
        print "%s button pressed" % button
        gtk.main_quit()

    def on_info_clicked(self, widget):
	''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
	aboutdialog = gtk.AboutDialog()
	aboutdialog.set_position(gtk.WIN_POS_CENTER)
	aboutdialog.set_name("Handy-Tuning")
	aboutdialog.set_version("1.0.0")
	aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
	aboutdialog.set_website("http://www.handylinux.org/")
	aboutdialog.set_website_label("HandyLinux Website")
	aboutdialog.set_authors(["\tHandy-Tunning  Copyright (C) 2014\n\t\t\tManon & coyotus\nThis program comes with ABSOLUTELY\nNO WARRANTY for details see\n\thttp://www.gnu.org/licenses/gpl.txt \nThis is free software, and you are welcome\nto redistribute it under certain conditions."])
	aboutdialog.run()
	aboutdialog.destroy()
 
Assistant()
gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#13 05-12-2014 18:46:00

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

GG  big_smile

J'ai avancer sur les fonctions pageforward et button_pressed

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

#settings = gtk.settings_get_default()
#theme = settings.get_property("gtk-theme-name")
#icons = settings.get_property("gtk-icon-theme-name")
#font = settings.get_property("gtk-font-name")

gobject.threads_init()
BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/") 
FULL_CONFIG = ['.bashrc', '.config/openbox/menu.xml']
twidget = gtk.EXPAND | gtk.FILL | gtk.SHRINK
theme_config = {".gtkrc-2.0":HOME_FOLDER+'/.gtkrc-2.0',
			"compton.conf":HOME_FOLDER+"/.config/compton.conf",
			"rc.xml":HOME_FOLDER+"/.config/openbox/rc.xml",
			"autostart":HOME_FOLDER+"/.config/openbox/autostart"}

newFichier, gtkConf = {}, {}

chdir(HOME_FOLDER)

if os.path.isdir("themesHL") != True: #si le dossier n'est pas présent
	os.mkdir("themesHL") #on créer le dossier
		
chdir(EMPLACEMENT)


def DE_DETECT():
	
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()
 
class Assistant:
    def __init__(self):
        assistant = gtk.Assistant()
        assistant.set_title("Handy-Tunning")
        assistant.set_position(gtk.WIN_POS_CENTER)
        assistant.connect("apply", self.button_pressed, "Apply")
        assistant.connect("cancel", self.button_pressed, "Cancel")
        assistant.connect("close", self.button_pressed, "Close")
        assistant.set_default_size( 400, 300 )
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        page = assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Avertissement !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
        label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        assistant.set_page_complete(vbox, True)
 
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Configuration !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
        label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème et cliquez sur Suivant.")
        label.set_line_wrap(True)
        self.checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
        self.checkOptionSAVE.set_active(1)
        self.checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
        self.checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
        self.checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(self.checkOptionSAVE, False, False, 0)
        vbox.pack_start(self.checkOptionCHANGE, False, False, 0)
        vbox.pack_start(self.checkOptionIMPORT, False, False, 0)
        vbox.pack_start(self.checkOptionEXPORT, False, False, 0)
        listeBoutonCheck = [self.checkOptionSAVE, self.checkOptionCHANGE, self.checkOptionIMPORT, self.checkOptionEXPORT]
        for bouton in listeBoutonCheck:
			bouton.show()
			bouton.connect("clicked", self.on_check_option_clicked, listeBoutonCheck)
        assistant.set_page_complete(vbox, True)

        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVotre thème à été sauvegardé avec succès.\n\n\n\n\n")
        boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
        boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()

        vbox = gtk.VBox()
        table = gtk.Table(2, 2, True) 
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Handy-Tunning !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Vous avez choisi l'option : Choisir un thème disponible\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
        #creation liste deroulante
        self.listeDeroulante = gtk.combo_box_new_text()
        self.listeDeroulante.append_text('Thèmes Disponible')
        self.listeDeroulante.set_active(0)
        self.listeDeroulante.set_wrap_width(0)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(self.listeDeroulante, True, True, 0)
        self.listeTheme() # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
        label.set_line_wrap(True)
        assistant.set_page_complete(vbox, True)
 
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "fenetre exemple")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Vous avez choisi l'option : Importer un thème télécharger\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
        label.set_line_wrap(True)
        filechooserbutton = gtk.FileChooserButton("Select A File", None)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(filechooserbutton, True, True, 0)
        assistant.set_page_complete(vbox, True)
         
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVotre thème à été exporté avec succès.\n\n\n\n\n")
        boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
        boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()
        # Set an alternative function to return the next page to go to
        assistant.set_forward_page_func(self.pageforward)

    def on_check_option_clicked(self, widget, listeBoutonCheck):
	    if widget.get_active():
			for bouton in listeBoutonCheck:
			    if bouton == widget:
			        pass
			    elif bouton != widget:
			        bouton.set_active(False)
    
    def pageforward(self,page):
        """
        Function called when the forward button is pressed,
        Arguments:
            page:
                integer index of the current page
        returns:
            integer index of the next page to display
        """
        if page == 0:
			return page+1
				
        elif page == 1 and self.checkOptionSAVE.get_active():
            return 2
        elif page == 1 and self.checkOptionCHANGE.get_active():
            return 3
        elif page == 1 and self.checkOptionIMPORT.get_active():
            return 4
        elif page == 1 and self.checkOptionEXPORT.get_active():
            return 5
            
    
    def listeTheme(self):
	'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
	themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
	for theme in themes_dispo:
		self.listeDeroulante.append_text(theme)
 
    def button_pressed(self, assistant, button):
		if button == 'Cancel':
			gtk.main_quit()
		
		if assistant.get_current_page() == 2:
			gtk.main_quit()
				
		if assistant.get_current_page() == 3:
			if self.listeDeroulante.get_active_text() == "Thèmes Disponible":
				pass
			elif self.listeDeroulante.get_active_text() != "Thèmes Disponible":
				print(self.listeDeroulante.get_active_text())
			
			
    def on_info_clicked(self, widget):
	''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
	aboutdialog = gtk.AboutDialog()
	aboutdialog.set_position(gtk.WIN_POS_CENTER)
	aboutdialog.set_name("Handy-Tuning")
	aboutdialog.set_version("1.0.0")
	aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
	aboutdialog.set_website("http://www.handylinux.org/")
	aboutdialog.set_website_label("HandyLinux Website")
	aboutdialog.set_authors(["\tHandy-Tunning  Copyright (C) 2014\n\t\t\tManon & coyotus\nThis program comes with ABSOLUTELY\nNO WARRANTY for details see\n\thttp://www.gnu.org/licenses/gpl.txt \nThis is free software, and you are welcome\nto redistribute it under certain conditions."])
	aboutdialog.run()
	aboutdialog.destroy()
if __name__ == "__main__":
	Assistant()
	gtk.main()

Hors ligne

#14 05-12-2014 19:03:16

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

j'ai rajouté l'option close, si on choisissait fermer à la dernière fenêtre ça fermais pas

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

#settings = gtk.settings_get_default()
#theme = settings.get_property("gtk-theme-name")
#icons = settings.get_property("gtk-icon-theme-name")
#font = settings.get_property("gtk-font-name")

gobject.threads_init()
BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/") 
FULL_CONFIG = ['.bashrc', '.config/openbox/menu.xml']
twidget = gtk.EXPAND | gtk.FILL | gtk.SHRINK
theme_config = {".gtkrc-2.0":HOME_FOLDER+'/.gtkrc-2.0',
			"compton.conf":HOME_FOLDER+"/.config/compton.conf",
			"rc.xml":HOME_FOLDER+"/.config/openbox/rc.xml",
			"autostart":HOME_FOLDER+"/.config/openbox/autostart"}

newFichier, gtkConf = {}, {}

chdir(HOME_FOLDER)

if os.path.isdir("themesHL") != True: #si le dossier n'est pas présent
	os.mkdir("themesHL") #on créer le dossier
		
chdir(EMPLACEMENT)


def DE_DETECT():
	
  DE = os.environ.get('DESKTOP_SESSION')

  if DE != 'xfce':
    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
    message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
    message.run()
    message.destroy()
    quit()
  else:
    print DE
DE_DETECT()
 
class Assistant:
    def __init__(self):
        assistant = gtk.Assistant()
        assistant.set_title("Handy-Tunning")
        assistant.set_position(gtk.WIN_POS_CENTER)
        assistant.connect("apply", self.button_pressed, "Apply")
        assistant.connect("cancel", self.button_pressed, "Cancel")
        assistant.connect("close", self.button_pressed, "Close")
        assistant.set_default_size( 400, 300 )
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        page = assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Avertissement !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
        label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        assistant.set_page_complete(vbox, True)
 
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Configuration !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
        label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème et cliquez sur Suivant.")
        label.set_line_wrap(True)
        self.checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
        self.checkOptionSAVE.set_active(1)
        self.checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
        self.checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
        self.checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(self.checkOptionSAVE, False, False, 0)
        vbox.pack_start(self.checkOptionCHANGE, False, False, 0)
        vbox.pack_start(self.checkOptionIMPORT, False, False, 0)
        vbox.pack_start(self.checkOptionEXPORT, False, False, 0)
        listeBoutonCheck = [self.checkOptionSAVE, self.checkOptionCHANGE, self.checkOptionIMPORT, self.checkOptionEXPORT]
        for bouton in listeBoutonCheck:
			bouton.show()
			bouton.connect("clicked", self.on_check_option_clicked, listeBoutonCheck)
        assistant.set_page_complete(vbox, True)

        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVotre thème à été sauvegardé avec succès.\n\n\n\n\n")
        boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
        boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()

        vbox = gtk.VBox()
        table = gtk.Table(2, 2, True) 
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Handy-Tunning !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Vous avez choisi l'option : Choisir un thème disponible\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
        #creation liste deroulante
        self.listeDeroulante = gtk.combo_box_new_text()
        self.listeDeroulante.append_text('Thèmes Disponible')
        self.listeDeroulante.set_active(0)
        self.listeDeroulante.set_wrap_width(0)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(self.listeDeroulante, True, True, 0)
        self.listeTheme() # appel fonction qui liste les themes disponible et les rajoute a la liste deroulante
        label.set_line_wrap(True)
        assistant.set_page_complete(vbox, True)
 
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "fenetre exemple")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
        label = gtk.Label("Vous avez choisi l'option : Importer un thème télécharger\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
        label.set_line_wrap(True)
        filechooserbutton = gtk.FileChooserButton("Select A File", None)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(filechooserbutton, True, True, 0)
        assistant.set_page_complete(vbox, True)
         
        vbox = gtk.VBox()
        vbox.set_border_width(5)
        assistant.append_page(vbox)
        assistant.set_page_title(vbox, "Félicitation !")
        assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
        label = gtk.Label("\nVotre thème à été exporté avec succès.\n\n\n\n\n")
        boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
        label.set_line_wrap(True)
        vbox.pack_start(label, True, True, 0)
        vbox.pack_start(boutonInfo, True, True, 0)
        assistant.set_page_complete(vbox, True)
        boutonInfo.connect("clicked", self.on_info_clicked)
        assistant.show_all()
        # Set an alternative function to return the next page to go to
        assistant.set_forward_page_func(self.pageforward)

    def on_check_option_clicked(self, widget, listeBoutonCheck):
	    if widget.get_active():
			for bouton in listeBoutonCheck:
			    if bouton == widget:
			        pass
			    elif bouton != widget:
			        bouton.set_active(False)
    
    def pageforward(self,page):
        """
        Function called when the forward button is pressed,
        Arguments:
            page:
                integer index of the current page
        returns:
            integer index of the next page to display
        """
        if page == 0:
			return page+1
				
        elif page == 1 and self.checkOptionSAVE.get_active():
            return 2
        elif page == 1 and self.checkOptionCHANGE.get_active():
            return 3
        elif page == 1 and self.checkOptionIMPORT.get_active():
            return 4
        elif page == 1 and self.checkOptionEXPORT.get_active():
            return 5
            
        elif page == 2:
			pass
    
    def listeTheme(self):
	'''fonction qui liste les themes dispo et les rajoute à la liste déroulante'''
	themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
	for theme in themes_dispo:
		self.listeDeroulante.append_text(theme)
 
    def button_pressed(self, assistant, button):
		if button == 'Cancel':
			gtk.main_quit()
		if button == 'Close':
			gtk.main_quit()
		
		if assistant.get_current_page() == 2:
			gtk.main_quit()
				
		if assistant.get_current_page() == 3:
			if self.listeDeroulante.get_active_text() == "Thèmes Disponible":
				pass
			elif self.listeDeroulante.get_active_text() != "Thèmes Disponible":
				print(self.listeDeroulante.get_active_text())
			
			
    def on_info_clicked(self, widget):
	''' ON peut là lancer dans un thread pour garder la main sur la fenetre principal '''
	aboutdialog = gtk.AboutDialog()
	aboutdialog.set_position(gtk.WIN_POS_CENTER)
	aboutdialog.set_name("Handy-Tuning")
	aboutdialog.set_version("1.0.0")
	aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
	aboutdialog.set_website("http://www.handylinux.org/")
	aboutdialog.set_website_label("HandyLinux Website")
	aboutdialog.set_authors(["\tHandy-Tunning  Copyright (C) 2014\n\t\t\tManon & coyotus\nThis program comes with ABSOLUTELY\nNO WARRANTY for details see\n\thttp://www.gnu.org/licenses/gpl.txt \nThis is free software, and you are welcome\nto redistribute it under certain conditions."])
	aboutdialog.run()
	aboutdialog.destroy()
if __name__ == "__main__":
	Assistant()
	gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#15 05-12-2014 20:48:07

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

Plop avec 'Close' ça ferme la fenetre quand tu clique sur appliquer ...
J'arrive sur IRC faut que je mange un truc avant wink

Hors ligne

#16 05-12-2014 20:52:04

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

manon a écrit :

Plop avec 'Close' ça ferme la fenetre quand tu clique sur appliquer ...
J'arrive sur IRC faut que je mange un truc avant wink

Il suffit de créer une def pour apply

        assistant.connect("apply", self.button_apply_pressed, "Apply")

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#17 06-12-2014 01:07:50

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

petite angoise ... insomnie
Alors non pas besoin . Je m'explique , gtk.assistant c'est super pratique .
9a permet de vraiment gérer ses page et ses fonction facilement comme pour check button
A chaque page on fait faire ce que l'on veut aux boutons et renvoyer la page désirée autant en profiter wink
Parce que quelque ligne de code .

def pageforward(self,page):
       # page 0 on revoye obligatoirement la page 1
        if page == 0:
			return page+1
				
        elif page == 1 and self.checkOptionSAVE.get_active():
            return 2
        elif page == 1 and self.checkOptionCHANGE.get_active():
            return 3
        elif page == 1 and self.checkOptionIMPORT.get_active():
            return 4
        elif page == 1 and self.checkOptionEXPORT.get_active():
            return 5

        # jonction avec button pressed . une fois la fonction fini 
        # On renvoye la page 2 pour quitter   
        elif page == 3:
			return 2


def button_pressed(self, assistant, button):
		if button == 'Cancel':
			gtk.main_quit()
		if assistant.get_current_page() == 2:
			gtk.main_quit()
				
		if assistant.get_current_page() == 3:
			# Si c'est la page 3 
			if self.listeDeroulante.get_active_text() == "Thèmes Disponible":
				pass
			elif self.listeDeroulante.get_active_text() != "Thèmes Disponible":
				#on fait nos trucs on peut faire apparaitre ProgressBar ...
				# et quand c'est fini en renvoi on peut renvoyer la page de son choix
				# dans la fonction pageforward elif page == 3 : return page 2
				time.sleep(10)
				print(self.listeDeroulante.get_active_text())

J'espére que tu m'auras suivit wink
EDIT: past complet ===>>>

Hors ligne

#18 06-12-2014 09:58:40

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Avec le pass dans ton code j'ai cette erreur

TypeError: an integer is required

Je pense qu'il est préférable de ne pas partager les condition d'une page et de mettre une fonction unique pour chaque page

page save le code de sauvegarde
page avec la liste de thème le code d'install du theme sélectionné
page theme importé pareil
page export pareil


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#19 08-12-2014 08:59:04

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

Je croie bien que l'on a notre interface graphique  big_smile
J'ai reformatée le code complet pour que l'on se repaire plus vite wink  une archive ici => archive

1418021440.png 1418021493.png

1418021534.png 1418021576.png

1418021625.png 1418021695.png

1418021723.png


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/")
DE = os.environ.get('DESKTOP_SESSION')

gobject.threads_init()

# Si xfce n'est pas l'environnement de bureau, on affiche un message puis coupe le script
if DE != 'xfce':
	message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
	message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
	message.run()
	message.destroy()
	quit()

# Si pas de dossier EMPLACEMENT , Creation du dossier
if os.path.isdir(EMPLACEMENT) != True:
	os.mkdir(EMPLACEMENT)
	
chdir(EMPLACEMENT)

class HandyTunning():
	
	def __init__(self):
		
		assistant = gtk.Assistant()
		assistant.set_title("Handy-Tunning")
		assistant.set_position(gtk.WIN_POS_CENTER)
		assistant.connect("apply", self.button_pressed, "Apply")
		assistant.connect("cancel", self.button_pressed, "Cancel")
		assistant.connect("close", self.button_pressed, "Close")
		assistant.set_default_size( 400, 300 )
		
		# Page 0 Accueil 
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		page = assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Avertissement !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
		label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		
		assistant.set_page_complete(vbox, True)
		
		# Page 1 Choix des options 
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Configuration !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
		label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème et cliquez sur Suivant.")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		
		self.checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
		self.checkOptionSAVE.set_active(1)
		self.checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
		self.checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
		self.checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
		listeBoutonCheck = [self.checkOptionSAVE, self.checkOptionCHANGE, self.checkOptionIMPORT, self.checkOptionEXPORT]
		for bouton in listeBoutonCheck:
			bouton.connect("clicked", self.on_check_option_clicked, listeBoutonCheck)
			vbox.pack_start(bouton, False, False, 0)
			bouton.show()
			
		assistant.set_page_complete(vbox, True)
		
		# Page 2 Sauvegarde 
		vbox = gtk.VBox()
		table = gtk.Table(2, 2, True)
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Handy-Tunning !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Sauvegarder votre thème\n\n\tRenseignez le nom du thème à sauvegarder \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		self.save_theme_entry = gtk.Entry()
		self.save_theme_entry.set_text("Votre thème")
		vbox.pack_start(self.save_theme_entry )
		assistant.set_page_complete(vbox, True)
		
		# Page 3 Choix du thème dans la liste déroulante
		vbox = gtk.VBox()
		table = gtk.Table(2, 2, True)
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Handy-Tunning !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Choisir un thème disponible\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		self.listeDeroulante = gtk.combo_box_new_text()
		self.listeDeroulante.append_text('Thèmes Disponible')
		self.listeDeroulante.set_active(0)
		self.listeDeroulante.set_wrap_width(0)
		
		self.listeTheme() # appel fonction qui liste les themes disponible
		
		vbox.pack_start(label, True, True, 0)
		vbox.pack_start(self.listeDeroulante, True, True, 0)
		assistant.set_page_complete(vbox, True)
		
		# Page 4 Importation 
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Importation")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Importer un thème télécharger\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		self.filechooserbutton = gtk.FileChooserButton("Select A File", None)
		self.filechooserbutton.set_current_folder(HOME_FOLDER + "/Téléchargements")
		vbox.pack_start(self.filechooserbutton, True, True, 0)
		assistant.set_page_complete(vbox, True)
		
		# Page 5 Exportation 
		vbox = gtk.VBox()
		table = gtk.Table(2, 2, True)
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Handy-Tunning !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Exporter votre thème\n\n\tRenseignez le nom du thème à sauvegarder \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		self.nom_theme_entry = gtk.Entry()
		self.nom_theme_entry.set_text("Votre thème")
		vbox.pack_start(self.nom_theme_entry )
		assistant.set_page_complete(vbox, True)
		
		# Page 6 Error
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Error")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("\n\nVous n'avez pas renseignez de nom\n\nou\n\nVous n' avez pas selectioné de thème \n\n\n\n\t\t\t\t Cliquez sur Précédent\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		assistant.set_page_complete(vbox, True)
		
		# Page 7 Félicitation
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Félicitation !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
		label = gtk.Label("\nOpération réalisée avec succès.\n\n\n\n\n")
		boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		vbox.pack_start(boutonInfo, True, True, 0)
		assistant.set_page_complete(vbox, True)
		boutonInfo.connect("clicked", self.on_info_clicked)
		
		
		assistant.show_all()
		
		
		assistant.set_forward_page_func(self.page_forward)
		
		
	def button_pressed(self, assistant, button):
		if button == 'Cancel':
			gtk.main_quit()
		
		# Page 2	
		if assistant.get_current_page() == 2 and self.save_theme_entry.get_text() != "Votre thème":
			print(self.save_theme_entry.get_text())
			time.sleep(4)
				
		# Page 3 , Si Page 3 et qu'un thème a bien été choisi dans la liste déroulante Thème disponible
		if assistant.get_current_page() == 3 and self.listeDeroulante.get_active_text() != "Thèmes Disponible":
			# mise en place du thème
			time.sleep(4)
			
		# Page 4 Importation
		if assistant.get_current_page() == 4 and self.filechooserbutton.get_file() != None:
			emplacementfichier = self.filechooserbutton.get_filename()
			emplacementfichier = self.m_decode(emplacementfichier)
			print(emplacementfichier)
			print(os.path.basename(emplacementfichier))
			time.sleep(4)
			
		# Page 5 Exportation
		if assistant.get_current_page() == 5 and self.nom_theme_entry.get_text() != "Votre thème":
			print(self.save_theme_entry.get_text())
			time.sleep(4)
			
		# Page 7	
		if assistant.get_current_page() == 7:
			gtk.main_quit()
		
						
	def page_forward(self, page):
		# Page 0
		if page == 0: 
			return page+1
		# Page 1	
		elif page == 1 and self.checkOptionSAVE.get_active():
			return 2 # si sur la page 1 le bouton SAVE est actif on renvoie la page 2
		elif page == 1 and self.checkOptionCHANGE.get_active():
			return 3 #return page 3
		elif page == 1 and self.checkOptionIMPORT.get_active():
			return 4
		elif page == 1 and self.checkOptionEXPORT.get_active():
			return 5
			
		# Page 2 Sauvegarde
		elif page == 2 and  self.save_theme_entry.get_text() != "Votre thème":
			return 7
		elif page == 2 and  self.save_theme_entry.get_text() == "Votre thème":
			return 6
			
		# Page 3
		elif page == 3 and self.listeDeroulante.get_active_text() != "Thèmes Disponible":
			return 7 # retourne page 7 Félicitation	
		elif page == 3 and self.listeDeroulante.get_active_text() == "Thèmes Disponible":
			return 6 # return Page 6 Error
		
		# Page 4
		elif page == 4 and self.filechooserbutton.get_file() != None:
			return 7	
		elif page == 4 and self.filechooserbutton.get_file() == None:
			return 6 
				
		# Page 5
		elif page == 5 and  self.nom_theme_entry.get_text() != "Votre thème":
			return 7
		elif page == 5 and self.nom_theme_entry.get_text() == "Votre thème":
			return 6 
			
		
	def on_check_option_clicked(self, widget, listeBoutonCheck):
		if widget.get_active():
			for bouton in listeBoutonCheck:
				if bouton == widget:
					pass
				elif bouton != widget:
					bouton.set_active(False)
					
	def listeTheme(self):
		themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
		for theme in themes_dispo:
			self.listeDeroulante.append_text(theme)
			
	def m_decode(self, emplacementfichier):
		liste = []
		searchCode = emplacementfichier.split('%')
		searchCode.remove(searchCode[0])
		for index, element in enumerate(searchCode):
			if len(element) == 2 and element != searchCode[-1]:
				liste.append( element + searchCode[index + 1][:2])
		emplacementfichier = emplacementfichier.replace('%', '')
		for element in liste:
			if element in emplacementfichier:
				emplacementfichier = emplacementfichier.replace(element, element.decode('hex'))
		return emplacementfichier
			
	def on_info_clicked(self, widget):
		aboutdialog = gtk.AboutDialog()
		aboutdialog.set_position(gtk.WIN_POS_CENTER)
		aboutdialog.set_name("Handy-Tunning")
		aboutdialog.set_version("1.0.0")
		aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
		aboutdialog.set_website("http://www.handylinux.org/")
		aboutdialog.set_website_label("HandyLinux Website")
		aboutdialog.set_authors(["\tHandy-Tunning  Copyright (C) 2014\n\t\t\tManon & coyotus\nThis program comes with ABSOLUTELY\nNO WARRANTY for details see\n\thttp://www.gnu.org/licenses/gpl.txt \nThis is free software, and you are welcome\nto redistribute it under certain conditions."])
		aboutdialog.run()
		aboutdialog.destroy()
		
		
if __name__ == "__main__":
	HandyTunning()
	gtk.main()
		
		

Hors ligne

#20 08-12-2014 10:58:53

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

J'ai un peu regardé le code ce matin, et j'ai remarqué quelques petit truc niveau interface.

Déjà il y a une différence entre le fait qu'on utilise compiz ou pas, par exemple, quand je lance le code sur ma debian ou sur le PC test Handy j'ai pas la même taille de fenêtre alors que la taille est sensée être fixée.
J'ai donc commenté la ligne en question et en effet la ligne ne sert à rien dans le code (du moins en session compiz, pour la session normale ,e vais retester chez moi).

		assistant.set_default_size( 400, 300 )

J'ai aussi regardé pour l'épaisseur du bouton information de la dernière fenêtre., au lieu de faire des multitude de \n j'ai contourné avec size_request.
Par contre ça ne fonctionne pas pour le menu déroulant ou le bouton d'importation.

		vbox.set_border_width(85)
		boutonInfo.set_size_request(20, 25)

la valeur (20, 25) seule la seconde est prise en charge là aussi je ne sais pas pourquoi mais ça évite d'avoir un bouton de 2 cm de haut, j'ai donc contourné avec border_wddth


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#21 08-12-2014 11:38:13

manon
#! Crunchikette #!

Re : Projet Handy-personnal-theme

Essais avec juste ( insertion des boutons dans la vbox)

vbox.pack_end(self.filechooserbutton, False, False, 4)
vbox.pack_end(self.listeDeroulante, False, False, 4)
vbox.pack_end(boutonInfo, False, False, 4)

Tu peux augmenter la valeur pour remonter le bouton wink
Teste et dis moi
1418031652.png

Hors ligne

#22 08-12-2014 12:19:59

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Merci, j'avais pas pensé à ça ça marche nickel


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#23 08-12-2014 14:51:10

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Rajout d'une icone au programme et la modif cité juste avant

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Written by: by manon and coyotus
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import os, gtk, shutil, tarfile
import threading, time, subprocess, gobject
from os import chdir
from xml.etree import ElementTree as  ET

BASE = os.path.expanduser('/')
HOME_FOLDER = os.path.expanduser('~')
EMPLACEMENT = os.path.join(HOME_FOLDER, "themesHL/")
DE = os.environ.get('DESKTOP_SESSION')

gobject.threads_init()

# Si xfce n'est pas l'environnement de bureau, on affiche un message puis coupe le script
if DE != 'xfce':
	message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
	message.set_markup('Attention environnement de bureau xfce non détecté !\n\n         Application uniquement compatible avec:\n\n                   "HandyLinux et XFCE4"')
	message.run()
	message.destroy()
	quit()

# Si pas de dossier EMPLACEMENT , Creation du dossier
if os.path.isdir(EMPLACEMENT) != True:
	os.mkdir(EMPLACEMENT)
	
chdir(EMPLACEMENT)

class HandyTunning():
	
	def __init__(self):
		
		assistant = gtk.Assistant()
		assistant.set_title("Handy-Tunning")
		assistant.set_position(gtk.WIN_POS_CENTER)
		assistant.connect("apply", self.button_pressed, "Apply")
		assistant.connect("cancel", self.button_pressed, "Cancel")
		assistant.connect("close", self.button_pressed, "Close")
		tune_icon = assistant.render_icon(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU)
		assistant.set_icon(tune_icon)
		# Page 0 Accueil 
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		page = assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Avertissement !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_INTRO)
		label = gtk.Label("Handy-Tunning va completement modifier l'apparence de votre système. Utilisez le en toute connaissance de cause.\n\nPour continuer cliquez sur Suivant.")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		
		assistant.set_page_complete(vbox, True)
		
		# Page 1 Choix des options 
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Configuration !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONTENT)
		label = gtk.Label("Selectionnez les option d'importation ou d'exportation de votre thème et cliquez sur Suivant.")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		
		self.checkOptionSAVE = gtk.CheckButton("Sauvegarder votre Configuration")
		self.checkOptionSAVE.set_active(1)
		self.checkOptionCHANGE = gtk.CheckButton("Choisir un thème disponible")
		self.checkOptionIMPORT = gtk.CheckButton("Importer un thème télécharger")
		self.checkOptionEXPORT = gtk.CheckButton("Exporter votre thème actuel")
		listeBoutonCheck = [self.checkOptionSAVE, self.checkOptionCHANGE, self.checkOptionIMPORT, self.checkOptionEXPORT]
		for bouton in listeBoutonCheck:
			bouton.connect("clicked", self.on_check_option_clicked, listeBoutonCheck)
			vbox.pack_start(bouton, False, False, 0)
			bouton.show()
			
		assistant.set_page_complete(vbox, True)
		
		# Page 2 Sauvegarde 
		vbox = gtk.VBox()
		table = gtk.Table(2, 2, True)
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Handy-Tunning !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Sauvegarder votre thème\n\n\tRenseignez le nom du thème à sauvegarder \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		self.save_theme_entry = gtk.Entry()
		self.save_theme_entry.set_text("Votre thème")
		vbox.pack_start(self.save_theme_entry )
		assistant.set_page_complete(vbox, True)
		
		# Page 3 Choix du thème dans la liste déroulante
		vbox = gtk.VBox()
		table = gtk.Table(2, 2, True)
		vbox.set_border_width(25)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Handy-Tunning !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Choisir un thème disponible\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		self.listeDeroulante = gtk.combo_box_new_text()
		self.listeDeroulante.append_text('Thèmes Disponible')
		self.listeDeroulante.set_active(0)
		self.listeDeroulante.set_wrap_width(0)
		self.listeTheme() # appel fonction qui liste les themes disponible
		
		vbox.pack_start(label, True, True, 0)
		vbox.pack_end(self.listeDeroulante, False, False, 4)
		assistant.set_page_complete(vbox, True)
		
		# Page 4 Importation 
		vbox = gtk.VBox()
		vbox.set_border_width(25)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Importation")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Importer un thème télécharger\n\n\tSelectionnez le thème à appliquer \n\t\tet cliquez sur Appliquer\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		self.filechooserbutton = gtk.FileChooserButton("Select A File", None)
		self.filechooserbutton.set_current_folder(HOME_FOLDER + "/Téléchargements")
		vbox.pack_end(self.filechooserbutton, False, False, 4)
		assistant.set_page_complete(vbox, True)
		
		# Page 5 Exportation 
		vbox = gtk.VBox()
		table = gtk.Table(2, 2, True)
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Handy-Tunning !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("Vous avez choisi l'option : Exporter votre thème\n\n\tRenseignez le nom du thème à sauvegarder \n\t\tet cliquez sur Appliquer\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		self.nom_theme_entry = gtk.Entry()
		self.nom_theme_entry.set_text("Votre thème")
		vbox.pack_start(self.nom_theme_entry )
		assistant.set_page_complete(vbox, True)
		
		# Page 6 Error
		vbox = gtk.VBox()
		vbox.set_border_width(5)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Error")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_CONFIRM)
		label = gtk.Label("\n\nVous n'avez pas renseignez de nom\n\nou\n\nVous n' avez pas selectioné de thème \n\n\n\n\t\t\t\t Cliquez sur Précédent\n\n\n\n")
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		assistant.set_page_complete(vbox, True)
		
		# Page 7 Félicitation
		vbox = gtk.VBox()
		vbox.set_border_width(25)
		assistant.append_page(vbox)
		assistant.set_page_title(vbox, "Félicitation !")
		assistant.set_page_type(vbox, gtk.ASSISTANT_PAGE_SUMMARY)
		label = gtk.Label("\nOpération réalisée avec succès.\n\n\n")
		boutonInfo = gtk.Button(stock = gtk.STOCK_DIALOG_INFO)
		label.set_line_wrap(True)
		vbox.pack_start(label, True, True, 0)
		vbox.pack_end(boutonInfo, False, False, 4)
		assistant.set_page_complete(vbox, True)
		boutonInfo.connect("clicked", self.on_info_clicked)
		
		
		assistant.show_all()
		
		
		assistant.set_forward_page_func(self.page_forward)
		
		
	def button_pressed(self, assistant, button):
		if button == 'Cancel':
			gtk.main_quit()
		
		# Page 2	
		if assistant.get_current_page() == 2 and self.save_theme_entry.get_text() != "Votre thème":
			print(self.save_theme_entry.get_text())
			time.sleep(4)
				
		# Page 3 , Si Page 3 et qu'un thème a bien été choisi dans la liste déroulante Thème disponible
		if assistant.get_current_page() == 3 and self.listeDeroulante.get_active_text() != "Thèmes Disponible":
			# mise en place du thème
			time.sleep(4)
			
		# Page 4 Importation
		if assistant.get_current_page() == 4 and self.filechooserbutton.get_file() != None:
			emplacementfichier = self.filechooserbutton.get_filename()
			emplacementfichier = self.m_decode(emplacementfichier)
			print(emplacementfichier)
			print(os.path.basename(emplacementfichier))
			time.sleep(4)
			
		# Page 5 Exportation
		if assistant.get_current_page() == 5 and self.nom_theme_entry.get_text() != "Votre thème":
			print(self.save_theme_entry.get_text())
			time.sleep(4)
			
		# Page 7	
		if assistant.get_current_page() == 7:
			gtk.main_quit()
		
						
	def page_forward(self, page):
		# Page 0
		if page == 0: 
			return page+1
		# Page 1	
		elif page == 1 and self.checkOptionSAVE.get_active():
			return 2 # si sur la page 1 le bouton SAVE est actif on renvoie la page 2
		elif page == 1 and self.checkOptionCHANGE.get_active():
			return 3 #return page 3
		elif page == 1 and self.checkOptionIMPORT.get_active():
			return 4
		elif page == 1 and self.checkOptionEXPORT.get_active():
			return 5
			
		# Page 2 Sauvegarde
		elif page == 2 and  self.save_theme_entry.get_text() != "Votre thème":
			return 7
		elif page == 2 and  self.save_theme_entry.get_text() == "Votre thème":
			return 6
			
		# Page 3
		elif page == 3 and self.listeDeroulante.get_active_text() != "Thèmes Disponible":
			return 7 # retourne page 7 Félicitation	
		elif page == 3 and self.listeDeroulante.get_active_text() == "Thèmes Disponible":
			return 6 # return Page 6 Error
		
		# Page 4
		elif page == 4 and self.filechooserbutton.get_file() != None:
			return 7	
		elif page == 4 and self.filechooserbutton.get_file() == None:
			return 6 
				
		# Page 5
		elif page == 5 and  self.nom_theme_entry.get_text() != "Votre thème":
			return 7
		elif page == 5 and self.nom_theme_entry.get_text() == "Votre thème":
			return 6 
			
		
	def on_check_option_clicked(self, widget, listeBoutonCheck):
		if widget.get_active():
			for bouton in listeBoutonCheck:
				if bouton == widget:
					pass
				elif bouton != widget:
					bouton.set_active(False)
					
	def listeTheme(self):
		themes_dispo= [nom for nom  in os.listdir(EMPLACEMENT) if os.path.isdir(nom) == True]
		for theme in themes_dispo:
			self.listeDeroulante.append_text(theme)
			
	def m_decode(self, emplacementfichier):
		liste = []
		searchCode = emplacementfichier.split('%')
		searchCode.remove(searchCode[0])
		for index, element in enumerate(searchCode):
			if len(element) == 2 and element != searchCode[-1]:
				liste.append( element + searchCode[index + 1][:2])
		emplacementfichier = emplacementfichier.replace('%', '')
		for element in liste:
			if element in emplacementfichier:
				emplacementfichier = emplacementfichier.replace(element, element.decode('hex'))
		return emplacementfichier
			
	def on_info_clicked(self, widget):
		aboutdialog = gtk.AboutDialog()
		about_icon = aboutdialog.render_icon(gtk.STOCK_ABOUT, gtk.ICON_SIZE_MENU)
		aboutdialog.set_icon(about_icon)
		aboutdialog.set_position(gtk.WIN_POS_CENTER)
		aboutdialog.set_name("Handy-Tunning")
		aboutdialog.set_version("1.0.0")
		aboutdialog.set_comments("Tool for import and export handylinux themes and icons")
		aboutdialog.set_website("http://www.handylinux.org/")
		aboutdialog.set_website_label("HandyLinux Website")
		aboutdialog.set_authors(["\tHandy-Tunning  Copyright (C) 2014\n\t\t\tManon & coyotus\nThis program comes with ABSOLUTELY\nNO WARRANTY for details see\n\thttp://www.gnu.org/licenses/gpl.txt \nThis is free software, and you are welcome\nto redistribute it under certain conditions."])
		aboutdialog.run()
		aboutdialog.destroy()
		
		
if __name__ == "__main__":
	HandyTunning()
	gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#24 06-06-2015 00:40:43

arpinux
nakedev

Re : Projet Handy-personnal-theme

et là c'est la grosse honte pour moi ... je suis même pas venu vous dire comme c'est trop bien cet outil !! big_smile
et en plus, j'ai mon smiley préféré  stone

Hors ligne

#25 06-06-2015 08:39:19

IceF0x
#! Gourou Linux

Re : Projet Handy-personnal-theme

Oui mais on a pas terminé le projet, on en était qu'au tout début là.


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

Pied de page des forums