logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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

#1 04-02-2024 22:05:13

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

[Résolu] conversion de python2 vers python3 pour un script DFiso

salut à tous les fans du serpent smile

la situation :
- je n'y connais rien en python
- pour DFiso, j'aimerais récupérer un script autrefois utilisé sur HandyLinux, le HandyTheme. ce script simple permet d'afficher une fenêtre de choix pour sélectionner un profil graphique, facilitant ainsi la configuration utilisateur en permutant les theme gtk/xfwm4/icones/police...
- ce script est en python2

la demande :
y-aurait-il une bonne âme pour nous aider à migrer ce script en python3 ?
c'est juste pour la structure, les commandes incluses et les chemins, je m'en chargerais

le script utilise des icones fournies dans le dossier.
tout est disponible sur git : https://framagit.org/handylinux/debdev/ … type=heads

merci d'avance pour votre aide smile

Dernière modification par arpinux (10-02-2024 16:00:02)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

En ligne

#2 04-02-2024 23:25:36

Cram28
Adhérent(e)
Lieu : Eure-et-Loir
Distrib. : Debian GNU/Linux 12.5
Noyau : Linux 6.1.0-20-amd64
(G)UI : Xfce 4.18
Inscription : 14-09-2020

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

Bonsoir,

Je ne suis pas compétent, mais il semble y avoir des outils:
- https://python2to3.com/
- https://docs.python.org/3/library/2to3.html

Aucune idée de ce que çà vaut, d'autant qu'en présentant le code pour le 1ier outils en ligne, rien ne change...
Peut-être normal: pas d'utilisation «exotique». En revanche version de la librairie GTK ?

@suivre, @+

Travaille du chapeau: "Je sais que vous croyez comprendre ce que vous pensez que j'ai dit, mais je ne suis pas certain que vous réalisiez que ce que vous avez entendu n'est pas exactement ce que je voulais dire..."

Hors ligne

#3 04-02-2024 23:43:29

Elzen
Modérateur
Distrib. : Debian Sid GNU/Linux
Noyau : amd64 (à jour le vendredi)
(G)UI : Touhy
Inscription : 01-07-2014

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

De toute façon, il va falloir changer pas mal de choses. Le code utilise PyGTK, un binding spécifique à Python qui ne fonctionnait que pour Python 2 et GTK 2. En Python 3, il faut passer par le binding générique de GObject Introspection, donc ça veut dire réécrire plusieurs trucs, autant en profiter pour passer à GTK 3 aussi au passage (vu que GTK 4 est déjà en route…)

C'est le genre de choses avec lequel je me débrouille plutôt pas trop mal, donc je veux bien jeter un œil, mais ma première tentative de lancement pour voir à quoi ça ressemble de base s'est soldée par un échec: un appel externe à xfconf-query qui plante parce que

La propriété « /Gtk/FontName » n’existe pas dans le canal « xsettings ».

(Bien qu'utilisant quelques outils venant d'Xfce et ayant donc xfconf-query d'installé, je n'utilise pas l'environnement complet, c'est peut-être pour ça qu'il me manque des choses par rapport à la situation visée).

Il y a de la doc spécifique sur ce que le script va chercher ailleurs et dans quel but ? (Vu le nom de la propriété, je suppose que c'est la police de caractères utilisée par le thème, qui chez moi est dans le fichier gtkrc et ne nécessite pas ce genre de manips…)

En ligne

#4 05-02-2024 00:46:11

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

c'est peut-être pour ça qu'il me manque des choses par rapport à la situation visée



Ptéte ça, parce que ça devrait exister (sur une install DF : )

xfconf-query -c xsettings -p /Gtk/FontName


DejaVu Sans Semi-Condensed 11



Tu devrai commenter ce qui est spécifique à ton environnement et si ça marche pour ce que tu as, l'ensemble devrait passer imho.

Dernière modification par otyugh (05-02-2024 00:47:43)


virtue_signaling.pngpalestine.png
~1821942.svg

En ligne

#5 09-02-2024 15:50:48

Elzen
Modérateur
Distrib. : Debian Sid GNU/Linux
Noyau : amd64 (à jour le vendredi)
(G)UI : Touhy
Inscription : 01-07-2014

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

Bon, je viens de prendre quelques minutes pour regarder en bootant sur une clef DFiso qui traînait (qui doit avoir au moins un an ou deux, donc pas forcément la dernière version, mais 'flemme de m'en refaire une pour si peu).

À vue de nez, il n'y a en fait quasiment rien à changer pour avoir un truc qui fonctionne (avec toutefois quelques warnings de dépréciation côté GTK).

En gros, il y a deux choses à changer pour que le script refonctionne. D'une part, au niveau des imports au début :

import pygtk
pygtk.require("2.0")
import gtk, os
import subprocess as sub


doit être remplacé par

import os, gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk as gtk
import subprocess as sub


pour passer de PyGTK à PyGI et de GTK 2 à GTK 3, comme mentionné ci-dessus.

D'autre part, entre Python 2 et Python 3, il y a notamment eu un changement sur la gestion des chaînes de caractères (on est passé de unicode/str à str/bytes), ce qui implique un léger changement sur les lignes 38 à 44 : pour chacune de ces lignes, il faut remplacer le

.rstrip('\n')


situé à la fin par

.rstrip(b'\n')


(donc juste ajouter un « b » juste avant le début de la chaîne de caractères), et c'est le seul souci bloquant pour lancer le script.

Ensuite, comme je disais, GTK râle un peu parce que plusieurs appels de fonctions sont dépréciés (notamment le constructeur avec des paramètres positionnels plutôt que par mots-clefs), mais visiblement ça marche tel quel en GTK 3, donc on peut parfaitement envisager de laisser le truc tel quel et de se poser davantage de questions au moment de l'éventuel passage à GTK 4.

Par contre, j'ai testé en ayant récupéré uniquement le fichier du script, sans le reste à côté, donc j'ai eu des symboles d'images cassés à cause des images, j'imagine que ça s'arrange tout seul en récupérant tout le dépôt, et quand je tente de cliquer sur un bouton, j'ai des messages d'erreurs en console à propos de l'inexistence du répertoire ~/.config/Terminal, donc il y a probablement des choses qui ont changé dans la conf' entre l'environnement d'origine du script et celui du liveUSB dont je me suis servi, ça vous serez sans doute plus calés que moi pour gérer !

Deux petites remarques en plus en vitesse : déjà, le code n'a pas trop l'air de respecter PEP8, perso ça ne me dérange pas outre mesure, mais de vrais devs Python pourraient râler smile et ensuite, l'en-tête du fichier est un peu moche avec des trucs inutiles dedans :

#!/usr/bin/env python
# -*-coding:utf-8-*-


Perso j'utilise habituellement ça :

#! /bin/python3
# coding: Utf-8


et ça marche très bien en étant (à mon sens, en tout cas) plus lisible.

Ça ira comme retour ? Hésitez pas à demander si besoin de plus.

En ligne

#6 09-02-2024 15:59:46

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

^^ merci beaucoup Elzen pour ton retour et tes conseils !! big_smile
je vais tester ça et peut-être attendre avant de sortir la DFiso-12.5 wink

je vois ça ce soir en vm avec une ISO toute fraîche, merci encore !

nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

En ligne

#7 09-02-2024 16:13:51

Elzen
Modérateur
Distrib. : Debian Sid GNU/Linux
Noyau : amd64 (à jour le vendredi)
(G)UI : Touhy
Inscription : 01-07-2014

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

De rien. Et ah, je viens de me rendre compte que j'avais oublié de tester un truc évident ^^"

En l'état, le bouton de retour arrière ne fonctionne pas, à cause du changement sur les chaînes de caractères : vu que sub.check_output(…) renvoie un objet de type bytes, on ne peut pas directement le concaténer aux str utilisés ailleurs comme ce serait fait ici.

Pour régler le souci, ça se passe encore sur les lignes 38 à 44 : il faut en fait remplacer

.rstrip('\n')


par

.rstrip(b'\n').decode()


donc ajouter « .decode() » à la toute fin en plus de l'ajout du « b » (ou faire dans l'autre sens, ajouter le « .decode() » avant et donc laisser le rstrip tranquille, mais je vais au plus simple par rapport à ce que j'avais dit ci-dessus) pour que les valeurs soient bien enregistrées comme des str et que donc le retour au thème initial fonctionne.

En ligne

#8 09-02-2024 21:32:41

vv222
Administrateur
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

La discussion au sujet de la PEP8 se déroule maintenant dans un fil dédié : Python et PEP8.

Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

En ligne

#9 09-02-2024 23:52:48

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

je vais poser tout ça sur git mais en attendant, voici le script mis à jour smile
le script fonctionne sur DFiso en installant le theme dmz

sudo apt install dmz-cursor-theme



les autres thèmes utilisés sont déjà sur DFiso
(pensez à choper les icones sur git pour tester)

#! /bin/python3
# coding: Utf-8

# changeur de thème rapide pour DFiso / Xfce
# sources : HandyTheme par @prx https://framagit.org/handylinux/debdev/-/blob/master/handylinuxlook/handylinuxlook-1.1/HandyTheme/handytheme.py?ref_type=heads
# mise à jour python3 par @Elzen https://debian-facile.org/viewtopic.php?id=34488

# TODO : ajouter la configuration de la taille de xfce4-panel via xfconf-query

import os, gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk as gtk
import subprocess as sub

class Theme:

  def __init__(self,font="",xfceTheme="",xfwmTheme="",cursorName="",cursorSize=""):
    self.xfceFont = font
    self.xfwmFont = font
    self.xfceTheme = xfceTheme
    self.xfwmTheme = xfwmTheme
    self.cursorName = cursorName
    self.cursorSize = cursorSize

  def apply(self,widget):
    os.system('xfconf-query -s "' + self.xfceFont + '" -c xfwm4 -p /general/title_font')
    os.system('xfconf-query -s "' + self.xfwmFont + '" -c xsettings -p /Gtk/FontName')
    os.system('xfconf-query -s "' + self.xfceTheme + '" -c xsettings -p /Net/ThemeName')
    os.system('xfconf-query -s "' + self.xfwmTheme + '" -c xfwm4 -p /general/theme')
    os.system('xfconf-query -s "' + self.cursorName + '" -c xsettings -p /Gtk/CursorThemeName')
    os.system('xfconf-query -s "' + self.cursorSize + '" -c xsettings -p /Gtk/CursorThemeSize')

  def getCurrent(self):
    self.xfceFont = sub.check_output(['xfconf-query','-c','xfwm4','-p','/general/title_font']).rstrip(b'\n').decode()
    self.xfwmFont = sub.check_output(['xfconf-query','-c','xsettings','-p','/Gtk/FontName']).rstrip(b'\n').decode()
    self.xfceTheme = sub.check_output(['xfconf-query','-c','xsettings','-p','/Net/ThemeName']).rstrip(b'\n').decode()
    self.xfwmTheme = sub.check_output(['xfconf-query','-c','xfwm4','-p','/general/theme']).rstrip(b'\n').decode()
    self.cursorName = sub.check_output(['xfconf-query','-c','xsettings','-p','/Gtk/CursorThemeName']).rstrip(b'\n').decode()
    self.cursorSize = sub.check_output(['xfconf-query','-c','xsettings','-p','/Gtk/CursorThemeSize']).rstrip(b'\n').decode()

class Main:
  def Quitter(self, widget):
    gtk.main_quit()

  def __init__(self):
    smallLightTheme = Theme("DejaVu Sans Condensed 10", "Arc", "Arc", "Adwaita", "22")
    normalLightTheme = Theme("DejaVu Sans Condensed 12", "Arc", "Arc", "Adwaita", "22")
    largeLightTheme = Theme("DejaVu Sans Bold 18", "Adwaita", "Default-hdpi", "Adwaita", "48")
    smallDarkTheme = Theme("DejaVu Sans Condensed 10", "Arc-Dark", "Arc-Dark", "DMZ-White", "22")
    normalDarkTheme = Theme("DejaVu Sans Condensed 12", "Arc-Dark", "Arc-Dark", "DMZ-White", "22")
    largeDarkTheme = Theme("DejaVu Sans Bold 18", "Adwaita-dark", "Default-hdpi", "DMZ-White", "48")

    currentTheme = Theme()
    currentTheme.getCurrent()

    window = gtk.Window()
    window.set_title("Changeur de Theme")
    window.connect("destroy", self.Quitter)
    window.set_default_size(450, 250)

    table = gtk.Table(3,3,False)

    boutonSmallLight =  gtk.Button()
    imgSmallLight = gtk.Image()
    imgSmallLight.set_from_file("icons/smallLight.png")
    boutonSmallLight.set_image(imgSmallLight)
    boutonSmallLight.connect("clicked", smallLightTheme.apply)

    boutonNormalLight =  gtk.Button()
    imgNormalLight = gtk.Image()
    imgNormalLight.set_from_file("icons/normalLight.png")
    boutonNormalLight.set_image(imgNormalLight)
    boutonNormalLight.connect("clicked", normalLightTheme.apply)

    boutonLargeLight =  gtk.Button()
    imgLargeLight = gtk.Image()
    imgLargeLight.set_from_file("icons/largeLight.png")
    boutonLargeLight.set_image(imgLargeLight)
    boutonLargeLight.connect("clicked", largeLightTheme.apply)

    boutonSmallDark =  gtk.Button()
    imgSmallDark = gtk.Image()
    imgSmallDark.set_from_file("icons/smallDark.png")
    boutonSmallDark.set_image(imgSmallDark)
    boutonSmallDark.connect("clicked", smallDarkTheme.apply)

    boutonNormalDark =  gtk.Button()
    imgNormalDark = gtk.Image()
    imgNormalDark.set_from_file("icons/normalDark.png")
    boutonNormalDark.set_image(imgNormalDark)
    boutonNormalDark.connect("clicked", normalDarkTheme.apply)

    boutonLargeDark =  gtk.Button()
    imgLargeDark = gtk.Image()
    imgLargeDark.set_from_file("icons/largeDark.png")
    boutonLargeDark.set_image(imgLargeDark)
    boutonLargeDark.connect("clicked", largeDarkTheme.apply)

    boutonReset = gtk.Button(stock=gtk.STOCK_UNDO)
    boutonReset.connect("clicked", currentTheme.apply)

    table.attach(boutonSmallLight,0,1,0,1)
    table.attach(boutonNormalLight,1,2,0,1)
    table.attach(boutonLargeLight,2,3,0,1)

    table.attach(boutonSmallDark,0,1,1,2)
    table.attach(boutonNormalDark,1,2,1,2)
    table.attach(boutonLargeDark,2,3,1,2)

    table.attach(boutonReset,0,3,2,3)

    table.set_row_spacings(5)
    table.set_col_spacings(5)
    table.set_row_spacing(1,10)

    window.add(table)
    window.show_all()

if __name__ == "__main__":
  Main()
  gtk.main()



il me reste à modifier pour prendre en compte la taille du panel, je vais fouiller la doc smile https://docs.xfce.org/xfce/xfconf/xfconf-query

Dernière modification par arpinux (10-02-2024 10:29:11)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

En ligne

#10 10-02-2024 15:59:25

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : [Résolu] conversion de python2 vers python3 pour un script DFiso

re smile
pour finir ce fil, encore merci @Elzen et voici le projet finalisé smile https://salsa.debian.org/debian-facile- … fiso-theme

nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

En ligne

Pied de page des forums