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

Debian-facile

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

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

#1 Re : Suivi du Wiki et des Projets Git » [Wiki] Sway » 03-06-2022 23:33:04

Cool cool cool!

1. Bon moi je suis toujours (à priori) bloqué avec mon driver proprio nvidia (enfin intel + nvidia, pour optimus j'ai pas bien compris si ça peut fonctionner ou pas) et accessoirement rofi.

2. Des astuces particulières pour ceux qui viennent de i3?

3. J'utilise souvent pour mes config les utilitaires de x11-utils comme xev ou xprop. Sais tu si il y a des équivalent sous wayland?

#2 Re : Scripts, programmes et robots » bubbros python et debian 11 Bullseye » 03-06-2022 23:23:16

Ah?! Bah j'ai dis une grosse c****rie alors tongue. Déso, J'étais persuadé que python2 avait été retiré (vu que les màj avaient retiré tout un tas de paquet reposant sur python2)
merci pour la précision @tit01!

#3 Re : Xfce » accès au dossier cible avec le menu contextuel du lien » 03-06-2022 09:20:56

Sur le bureau, je ne sais pas si c'est possible facilement.


Dans thunar, tu peux facilement rajouter des menus perso:

    Edition > Configurer les actions personnalisées

    1. Dans l'onglet Base, tu peux créer une commande comme:

f=%f; thunar $(dirname $(realpath $f))


    2. Dans l'onglet Conditions d'apparition tu peux tout sélectionner (je ne vois pas le moyen de filtrer uniquement les liens)

#4 Re : KDE » [Résolu] Alt Tabulation - Simple clic » 20-04-2022 16:19:16

Tout se trouve dans Configuration du système

Ouvertures des dossiers/fichiers
Comportement de l'espace de travail > Comportement général > Cliquer sur les fichiers et les dossiers : choix entre "les ouvre" ou "les selectionne"


Alt-Tab
Gestion des fenêtres > Changeur de tâches > le menu déroulant (sous Visualisation)

Dans mon souvenir, il y en a quelque uns de bugués (rien ne s'affiche).
Tu peux installer le paquet kwin-addons pour obtenir de nouveau "modes", j'imagine que le mode "vignette" est celui qui te conviendra le mieux.
Tu peux cliquer sur l'icône à coté du menu déroulant pour prévisualiser l'effet.

#5 Re : Scripts, programmes et robots » Suggestions de trucs à coder » 18-04-2022 11:39:04

Pas sûr d'avoir bien tout compris, mais si c'est plus la finalité que le moyen qui intéresse, regarde du coté de copyq et plus particulièrement de son API

#6 Scripts, programmes et robots » Generer (GUI) style CSS pour Markdown » 01-04-2022 15:10:37

David5647
Réponses : 0
Yop! Bonjour!

version courte : je cherche une interface graphique pour générer du CSS avec aperçu en continu

version (plus) longue :
Ayant une connaissance plutôt partielle du CSS, ni étant un artiste inspiré,
je me demande si il existe des logiciels (GUI) pour générer des feuilles de style. Histoire de me faciliter la tache...
Dans l'idée, on pourrait imaginer un libreoffice/paint qui pourrait enregistrer uniquement le style.

L'idée serait surtout de créer des feuilles de style pour des contenus à base de Markdown et de ReStructuredText.

(A défaut, si vous avez des feuilles de styles perso/des ressources à proposer, je suis preneur)

#7 Re : Matériel » Luminosité écran & clavier » 20-02-2022 17:55:14

pour l'écran:

j'avais aussi noté le paquet brigthnessctl

Tu as quoi dans ton dossier /sys/class/backlight/intel_backlight?
j'y trouve (entre autres) les fichiers en lecture seule :actual_brightness, max_brightness
et le fichier libre en écriture brightness, à qui je peux attribuer une valeur (entre 0 et max_brightness)

echo 150 > /sys/class/backlight/intel_backlight/brightness

#8 Re : Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 17-02-2022 14:35:03

Bon le code est bien plus lisible comme ça ;p

---

ben c'est du ciblage
self= fenetre
fr01= Frame ds la fenetre
cnv01= Canvas ds le Frame
fr01= Frame ds le Canvas
btn01= Button ds le Frame

ca fait beaucoup de niveaux c'est vrai, ms a part tout poser sur la fenetre... je vois pas comment faire.
Tu fais comment toi?

Qu'on s'entende bien, faire:

mon_objet.variable = "valeur"

c'est simplement créer une variable dans l'espace de nom de mon_objet. C'est juste une organisation du code.

Il y a plusieurs réponses possibles:

1) A quoi sert une variable?
Une variable sert à stocker un objet pour une utilisation ultérieure.
Il faut créer une variable seulement si tu l'utilise ensuite, là ce n'était pas le cas.
As tu besoin de toutes ces variables? Est-ce important pour ton programme de conserver tout l'arbre?
Si tu veux acceder à un canvas, as tu besoin d'avoir une référence explicite à la frame qui le contient?

Quand tu écris

self.fr01.cnv01.fr01.btn01

as tu besoins de toutes les variables intermédiaires ou as tu besoins uniquement de la référence au bouton?

2) Ciblage (structure du code)

En soit, faire refléter la hiérarchie des objets comme cela, c'est plutôt une bonne idée, pourquoi pas.
Je trouve quand même que les écritures comme

self.var1.var2.var3.var4

Plutôt lourdes, donc à utiliser avec parcimonie.
Si tu veux créer la même structure avec un code (que j'estime) plus lisible, je peux te proposer ça:


##########################################
####### Classes d'un module fictif #######
##########################################
# Soit les classes A, B, C des objets tkinter
# Canvas, Frame, Button... Peu importe
class B:
    pass

class C:
    pass

class D:
    pass


########### ta méthode ################

# Voici ce que ça donne avec la méthode que tu as utilisé
class A1:
    def __init__(self):
        self.bbbbbbb = B()
        self.bbbbbbb.ccccccc = C()
        self.bbbbbbb.ccccccc.ddddddd = D()
        self.bbbbbbb.ccccccc.ddddddd.eeeeeee = "Ta méthode"

########## Proposition 1 ##################
#
# Créer des variables locales,
# faire les opératins avec les variables locales,
# enfin, ratacher et organiser les objets entre-eux
#

class A2:

    def __init__(self):

        bbbbbbb = B()
        ccccccc = C()
        ddddddd = D()
        ddddddd.eeeeeee = "Proposition 1"
        ccccccc.ddddddd = ddddddd
        bbbbbbb.ccccccc = ccccccc

        self.bbbbbbb=bbbbbbb

# (cette solution est une sorte de version "dépliée" de la proposition 2,
# un peu comme si l'on écrivait procéduralement sans faire usage des classes)


######### Proposition 2 ####################
#
# Utiliser l'héritage pour bien séparer les objets
# La structure se construit plus "naturellement"

class A3:
    def __init__(self):
        self.bbbbbbb = B2()

class B2(B):
    def __init__(self):
        self.ccccccc = C2()

class C2(C):
    def __init__(self):
        self.ddddddd = D2()

class D2(D):
    def __init__(self):
        self.eeeeeee = "Proposition 2"

aaaaaaa = A1()
print("aaaaaaa.bbbbbbb.ccccccc.ddddddd.eeeeeee :", aaaaaaa.bbbbbbb.ccccccc.ddddddd.eeeeeee)
aaaaaaa = A2()
print("aaaaaaa.bbbbbbb.ccccccc.ddddddd.eeeeeee :", aaaaaaa.bbbbbbb.ccccccc.ddddddd.eeeeeee)
aaaaaaa = A3()
print("aaaaaaa.bbbbbbb.ccccccc.ddddddd.eeeeeee :", aaaaaaa.bbbbbbb.ccccccc.ddddddd.eeeeeee)



---

si tu fais ref a la derniere L du 2° fichier ben... si c'est un bouton, c'est le bouton personnalisé, celui defini ds le 3° fichier

Ce n'est pas un bouton, tu peux vérifier avec la fonction type().
La variable contient une classe qui a pour attribut un bouton tkinter,
self.btn01_retour et self.btn02_retour ne pourront pas être utilisés de la même façon puisqu'ils ne représentent pas des objets du même type.
C'est un peu du chipotage, ça ne change rien à l’exécution du code, mais ça rajoute qd même un peu de confusion.

---

Tt laisser ds 1 seul fichier? ben si tu trouves que c'est brouillon avec 3 fichiers, imagine le tt ds 1 seul... et puis là c'est un truc simple
bref je souhaite garder mes 3 fichiers

Je dis juste que ça ne change fondamentalement pas grand chose à condition qu'il n'y ai pas de variables globales, c'est tout.
Et donc, je sous-entends que c'est juste une histoire d'organisation de code (si tes variables sont bien confinées à tes classes).
Bref, ma remarque portait sur les variables globales pas directement sur les fichiers.
Et donc, si 3 fichiers c'est plus lisible, partons sur 3 fichiers, ce n'est pas ce que je questionnais.

---

le bouton fait bien ce que je lui demande, detruire le Frame bleu (c'est pr cela qu'il est encore en vie celui-là), ms je vx lui dire de fermer la fenetre, pas de détruire le Frame bleu


Je n'ai toujours pas compris la demande, quelle fenêtre? la popup c'est bien ça? Fermer = détruire?
Si tu détruis la fenêtre popup qui contient ta frame (ce que le premier bouton fait), où veut tu que ta frame aille? Je comprends pas

J'ai reformulé un peu ton code:

#!/usr/bin/env python3

import tkinter as tk

class MyMainWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.creer_widgets()

    def create_popup_window(self):
        MyPopup(self)

    def creer_widgets(self):
        tk.Button(self, text="open popup", command=self.create_popup_window).pack()


class MyPopup(tk.Toplevel):
    def __init__(self, parent):
        super().__init__()
        self.parent = parent
        self.creer_Widgets()

    def creer_Widgets(self):

        popup_frame = tk.Frame(self, bg="blue")
        popup_frame.grid(column=0, row=0)

        kill_mainw_Btn = BtnKill(popup_frame, "kill mainwindow", self.parent.destroy, 0)
        kill_popup_Btn = BtnKill(popup_frame, "kill popup", self.destroy, 1)
        kill_frame_Btn = BtnKill(popup_frame, "kill blue frame", popup_frame.destroy, 2)

        kill_buttn_Btn = BtnKill(popup_frame, "self kill btn", None, 3)
        kill_buttn_Btn.configure(command=kill_buttn_Btn.destroy)


class BtnKill(tk.Button):
    def __init__(self, parent, text, command, row):

        super().__init__(parent, text=text, command=command)
        self.grid(column=0, row=row)


if __name__ == "__main__":

    window = MyMainWindow()
    window.mainloop()
 



Tu as pour seuls objets:
  - la fenêtre principale : MyMainWindow, désignée par self.parent
  - la popup : MyPopup, désignée par self, enfant de window
  - la frame de la popup, tk.Frame, désignée par popup_frame, enfant de la popup
  - les boutons : BtnKill, désignés par les variables kill_<nom>_Btn, enfants de popup_frame

(les nom de variables soulignés correspondent à l'espace de nom de la fonction Popup.creer_Widgets)
 
Lequel/lesquels veut tu détruire (sachant que détruire le parent détruit l'enfant)?

#9 Re : Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 16-02-2022 20:42:50

Bon, je vais difficilement pouvoir t'aider sur ce code, entre autre pour les raisons suivantes :

    - c'est encore trop brouillon
    - les noms de sont pas/trop peu explicites (classe_F01R, self.fr01.cnv01, self.cadre01, self.btn01_retour
    - trop de paramètres parasites inutiles (par exemples esthétiques pad_x, pad_y, bg...)
    - des objets (boutons) inutiles pour l'exemple (Scrollbar , frames, bouton info,)
    - des écritures peu compréhensibles (self.fr01.cnv01.fr01.btn01= tk.Button(self.fr01.cnv01.fr01,...)
    - des variables inutiles (créée mais pas utilisée (self.titre, self.width, self.height...))
    - des écritures confuses (self.btn01_retour est un bouton, self.btn02_retour n'est pas un bouton)
    - on peut ajouter : la surcharge de commentaires, la présentation du code...

Il faut que tu fournisses un exemple le plus simplifié possible qui illustre ton problème, là c'est difficile de t'aider dans ces conditions

ce bouton détruit bien le frame bleu,
hors ce que je souhaite et n'arrive pas a faire c'est détruire la fenetre et faire apparaitre la fenetre principale (celle qui a le mainloop())
j'ai dc 3 niveaux
le fichier de la fenetre principale (mainloop())
---> le fichier de la fenetre secondaire (avec le fr bleu et a l'interieur de ce fr bleu mon bouton_personnalisé)
-------> le fichier de mon bouton personnalisé


Il me semble que le code fourni (une fois les fichiers correctement nommés)  réalise cette tâche, à moins que je n'ai pas compris la demande...

variables globales, j'essayais justement de ne pas en utiliser, faut que je revoie ma copie sur le sujet(?!)


Il y en avait dans le premier code fournis (#1), là c'est bon de ce coté là, c'était surtout pour dire qu'il n'y avait pas de différence spécifique entre plusieurs fichier avec des import et un seul fichier

#10 Re : Scripts, programmes et robots » [Résolu]remplacement d'une chaine de caratere dans chaine de caratere » 06-02-2022 20:10:07

Tawal a écrit :

Et pas trop bon le /p*/cp*, faut pas exagérer non plus et c'est un tantinet risqué

le match sur "l n" est pas mal forcé aussi ^^
Oui, je vais préciser que c'est un peu troll qd même

Et pt'être pour préciser à VBrice et à ceux qui débutent dans la manipulation d'expression régulière:
La concision et le temps d’exécution de ce genre de traitement de texte est généralement peu important,

je vois deux points important lors de la constitution d'une expression:
    - le temps qu'on met à la constituer : faites au plus vite, ça sert à rien d'optimiser pdt des heures une expression
    - faites la robuste : essayer de constituer une expression la plus restrictive possible pour éviter les erreurs, surtout si le programme évolue.
  ( - sa lisibilité : plus facile à maintenir si on revient dessus plus tard, les commandes de départ avec les pipes au awk sont plus lisibles que les dernières avec sed)

Après c'est un p'tit jeu stimulant que de se prendre la tête à faire la plus consiste, la plus rapide des expressions

#11 Re : Scripts, programmes et robots » [Résolu]remplacement d'une chaine de caratere dans chaine de caratere » 06-02-2022 17:51:42

Mais comment elles sont longuuuuuuuuuuuuuuuuuuuuuuuues tes commandes:

edit : Attention! !!!TROLL!!! ne pas utiliser la commande telle quelle, cf message en dessous

sed '/l n/{s/\(^[^:]*:\s*\|(\w*)\)//g;q};d' /p*/cp*



(haha, bien joué tongue )

#12 Re : Scripts, programmes et robots » [Résolu]remplacement d'une chaine de caratere dans chaine de caratere » 05-02-2022 20:36:03

Avec sed :

explicitement le (R) et le (TM):

grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/\((R)\|(TM)\)//g'

ou tout ce qui est entre parenthèses:

grep model /proc/cpuinfo | cut -d : -f2 | tail -1 | sed 's/(\w*)//g'

#13 Re : Débuter avec la ligne de commande » [Résolu] passer à un répertoire tout autre puis revenir » 02-02-2022 00:33:25

Haha, oui, c'est deux fois plus rapide!

j'ai retrouvé la forme sur des forums, mais je vois rien dans la doc pour cd -,
c'est pas un "tilde expansion", c'est quoi alors?

edit : ha, si, c'est un paramètre de cd, c'est pas propre au shell doc bash - builtins

#15 Re : Scripts, programmes et robots » Python: tkinter cibler 1 widget ou fenetre depuis 1 autre widget » 01-02-2022 23:30:15

Faut vraiment que tu puisses fournir un code fonctionnel, là ça va être difficile de t'apporter une aide.
Je vois bien que tu as fait l'effort de détailler, mais comme le code n'est pas complet, qu'il faudrait le debugger et que ce n'est pas très clair franchement, c'est compliqué.
Essaie de présenter un code fonctionnel le plus minimal possible, sans variables non nécessaires.

De ce que je peux déjà te dire/te rappeler:

espace de nom (namespace)
fondamentalement, que tes classes soient dans le même fichier ou dans des fichiers différents ça ne change rien.
Quand tu fais un import, ce que tu fais c'est que tu fusionnes des espaces de nom

De manière générale, évite d'employer des variables globales, essaie de confiner tes variables à tes classes. Et normalement tu n'auras pas de problème peu importe où se trouve ta classe.

tout est objet
Tu peux passer en paramètre d'une fonction un entier, une string aussi bien qu'une fonction, qu'une instance d'une classe... Tout quoi


class A:
    def __init__(self, func):
        self.fonction = func

def myfonction(text):
    print(text)

a = A(myfonction)
a.fonction("Du texte")
 



structure du programme
Tu peux organiser ton code ainsi:

class MainWindow(tk.Tk):
    pass

class Popup(tk.Toplevel):
    pass

class Bouton(tk.Button):
    pass

 



super()
Oui, la fonction super permet de faire appel à la classe héritée, et par conséquent de l'initialiser via sa méthode __init__().
Il faut employer cette ligne à chaque fois qu'on hérite d'une classe, je pense pas que ce soit utile de creuser son fonctionnement pour l'instant.

Qu'est ce que master?
Tu as tronqué l'exemple, master est le paramètre passé à l'initialisation de Application
Il est ensuite passé comme paramètre à l'initialisation de tk.Frame,
soit super().__init__(master) l'équivalent de tk.Frame(master)

Donc le paramètre master doit être un objet tkinter susceptible d'êrte parent d'un autre widget, si il n'est pas spécifié la fenêtre est indépendante, sinon, elle est  la fille de master

ps : si tu souhaites, il y a des forums plus spécifiques à python, je traîne parfois par là : https://www.developpez.net/forums/f96/a … es/python/. Essaie de suivre un max les conseils que je te donne en début de post, le forum y est plus rigoureux tongue

#16 Re : Scripts, programmes et robots » [RESOLU] python3 PIL debian SID » 31-01-2022 17:05:13

Si tu veux laisser le code source tranquille et juste surcharger le viewer avec la fonction register


import tempfile
import subprocess
import os

from PIL import ImageShow, Image, ImageDraw

class MyViewer(ImageShow.Viewer):
    format = "PNG"
    options = {"compress_level": 1}

    def show_file(self, file, **options):
        """Display given file"""
        fd, path = tempfile.mkstemp()
        with os.fdopen(fd, "w") as f:
            f.write(file)
        with open(path) as f:
            command = "xdg-open"
            subprocess.Popen(
                ["im=$(cat);" + command + " $im; sleep 1; rm -f $im"], shell=True, stdin=f
            )
        os.remove(path)
        return 1

ImageShow.register(MyViewer, 0)

im = Image.new('RGB', (400,400))
draw = ImageDraw.Draw(im)
draw.rectangle((200, 100, 300, 200), fill=(0, 192, 192), outline=(255, 255, 255))
im.show()
 

#17 Re : Scripts, programmes et robots » [RESOLU] python3 PIL debian SID » 31-01-2022 16:29:23

Je suis quand même allé voir au niveau du code.
C'est peut-être de coté d'xdg-open que vient le problème???? Son fonctionnement à t'il été changé? met t'il plus de temps à se lancer?
L'image est bien supprimée avant qu'elle puisse être ouverte

Dans le fichier /usr/lib/python3/dist-packages/PIL/ImageShow.py

class UnixViewer(Viewer):
    format = "PNG"
    options = {"compress_level": 1}

    def get_command(self, file, **options):
        command = self.get_command_ex(file, **options)[0]
        return f"({command} {quote(file)}; rm -f {quote(file)})&"

    def show_file(self, file, **options):
        """Display given file"""
        fd, path = tempfile.mkstemp()
        with os.fdopen(fd, "w") as f:
            f.write(file)
        with open(path) as f:
            command = self.get_command_ex(file, **options)[0]
            subprocess.Popen(
                ["im=$(cat);" + command + " $im; rm -f $im"], shell=True, stdin=f
            )
        os.remove(path)
        return 1



L'insertion d'un sleep 1 semble fonctionner chez moi

            subprocess.Popen(
                ["im=$(cat);" + command + " $im; sleep 1; rm -f $im"], shell=True, stdin=f
            )



Ou si je remplace

command = self.get_command_ex(file, **options)[0]

(qui donne xdg-open) par

command = "gwenview"

L'image est correctement affichée, alors même que c'est bien gwenview qui est ouvert dans les deux cas.

#18 Re : Scripts, programmes et robots » [RESOLU] python3 PIL debian SID » 31-01-2022 15:21:30

J'ai pas de solution miracle à proposer, mais tant que le code est destiné à un usage personnel, on peut s'en sortir

Méthode de bourrin : surcharger la méthode show (testé sur sid)

import multiprocessing
import subprocess
from pathlib import Path
import os
import sys
import types
from PIL import Image, ImageDraw
import uuid

tempdir = Path('/tmp')

class Process(multiprocessing.Process):
    """Classe pour ouvrir l'image dans un processus en parallele"""

    def __init__(self, img):
        super(Process, self).__init__()
        self.img = img

    def run(self):

        print("Ouverture de l'image")
        # generation d'un nom aléatoire
        tempfile = tempdir / (uuid.uuid4().hex + ".png")
        # sauvegarde dans le dossier tempdir
        self.img.save(tempfile)
        # Ouverture avec xdg-open
        p = subprocess.Popen(["xdg-open", tempfile], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        # attends la fin du process
        p.communicate()
        # détruit le fichier
        os.remove(tempfile)
        print("Fermeture de l'image")

class MyImage:
    """Classe pour surcharger la méthode show"""

    @staticmethod
    def new(*args, **kwargs):

        img = Image.new(*args, **kwargs)

        # On lie la méthode MyImage.show à l'objet img
        img.show = img.test = types.MethodType(MyImage.show, img)

        return img

    @staticmethod
    def show(im):
        print("appel img.show()")
        p1 = Process(im)
        p1.start()
        print("quitte img.show()")


im = MyImage.new('RGB', (400,400))
draw = ImageDraw.Draw(im)
draw.rectangle((200, 100, 300, 200), fill=(0, 192, 192), outline=(255, 255, 255))
im.show()
 

#19 Re : Système » Flash noir » 31-01-2022 00:34:15

Salut!

As tu résolu ton problème?
Sinon, te souviens tu des manipulations que tu avais effectuées sur fedora? Dès fois que cela puisse éclairer qqu sur le pourquoi cette même commande ne fonctionne pas sous debian...
Essaie de fournir un maximum d'info sur le système que tu avais avant vs maintenant. Même noyau? Même driver graphiques? Même environnement? Même versions? etc.

#20 Re : Autres WM » Dunst : pas de notifications » 28-01-2022 12:40:12

erreur 1

WARNING: Unknown keyboard shortcut: 'ctrl+grave'


=> la configuration par défaut ne semble pas adaptée au clavier français, le symbole/touche grave n’est pas trouvée (parcequ'elle requiert un modificateur? (AtlGr))
https://github.com/dunst-project/dunst/issues/268 :

# Redisplay last message(s).
# On the US keyboard layout "grave" is normally above TAB and left
# of "1". Make sure this key actually exists on your keyboard layout,
# e.g. check the output of 'xmodmap -pke'
history = ctrl+grave


Tu peux modifier la config et mettre le symbole qui correspond à ton clavier

avec la commande xev + appui de la touche, chez moi :

KeyRelease event, serial 35, synthetic NO, window 0x3000001,
    root 0x135, subw 0x0, time 213581110, (50,166), root:(644,472),
    state 0x10, keycode 49 (keysym 0x13bd, oe), same_screen YES,
    XLookupString gives 2 bytes: (c5 93) "œ"
    XFilterEvent returns: False


Soit dans la config :

history = ctrl+oe

(voir man dunst pour la création du ficher de config)

erreur 2

 CRITICAL: Cannot acquire 'org.freedesktop.Notifications': Name is acquired by 'dunst' with PID '1640'.

L'erreur renvoyée signifie qu'un autre processus écoute déjà 'org.freedesktop.Notifications et qu'il s'agit de dunst. Donc c'est simplement que dunst est déjà actif

Conclusion
la première erreur est un simple avertissement, la raccourcis ne fonctionnera simplement pas
la deuxième te dit simplement que dunst est déjà lancé,
donc rien ici n'explique pourquoi tu n'as pas de notifications

Tester
Tu peux peut-être essayer de lancer une notif manuellement avec:

dunstify "Test"


Tu peux regarder si dunst est en pausse:

dunstctl is-paused



Tu peux aussi essayer de tuer tout les processus dunst et relancer en ligne de commande.

#21 Re : Autres WM » icones pour i3status (ou autres...) » 25-01-2022 03:38:04

1) installer le paquet

apt install fonts-font-awesome



2) trouver une icone/code utf-8
  Il y a sûrement de meilleures manière de faire, pour ma part, comme c'est très ponctuel:
  j'ouvre libreoffice writer > insertion > caractères spéciaux, je sélectionne fontawesome, puis je choisi l’icône que je souhaite utiliser
  finalement je le copie-colle vers mon fichier de configuration

Tu dois aussi pouvoir retrouver la liste des icônes quelque part sur le net, ainsi que les codes correspondants.

3) configurer la police
  Ça se configure comme une autre police d'écriture, ça dépend du programme que tu configures

Pour avoir quelques infos, notamment retrouver le nom exact de la police, tu peux utiliser la commande fc-list:

fc-list | grep [Aa]wesome


/usr/share/fonts/opentype/font-awesome/FontAwesome.otf: FontAwesome:style=Regular
/usr/share/fonts/truetype/font-awesome/fontawesome-webfont.ttf: FontAwesome:style=Regular
 



  pour i3bar, dans ta config i3 (à vérifier) :

bar {
  ...
  font pango:FontAwesome Regular 11
  ...
}



pour polybar (ce que j'utilise), j'ai :
une ligne pour configurer la police et créer un alias (3e police configurée):

font-2 = "FontAwesome:size=11;4"


Puis, pour utiliser une icône (T3 = 3e police, T- retour à la première):

%{T3}%{T-}

#22 Re : Scripts, programmes et robots » [RESOLU] python: variable de controle IntVar set() et get() » 24-01-2022 23:12:10

Haha!

C'est une erreur qui me semble assez typique, mais ce que je trouve drôle c'est que ça devrait être contre-intuitif de faire ça en python, puisqu'on fait ça tout le temps.
Par exemple, si tu fais:

my_var = [1,2,3,4]
my_var = 1
print(type(my_var))

Qu'affiche le print à ton avis?

Et si tu fais ça? C'est assez similaire non?

self.v_Int_Var= tk.Intvar(self.fenetre)
self.v_Int_Var= random.randint(1000, 2000)


tongue

Si ce que tu souhaites c'est changer le texte du label, la méthode de @nlancien doit fonctionner aussi.
Utiliser une variable tkinter permet surtout partager une valeur entre plusieurs widget,
ça peut permettre aussi de séparer les données de l'interface dans le code et sûrement d'autres trucs...
Pour des cas simples on peut s'en passer.

ps: tu peux passer le post en résolu
(et, même si c'est par forcément nécessaire là, partager le bout de code, la ligne qui contient la résolution peut être utile pour ceux qui rencontreraient le même problème)

#23 Scripts, programmes et robots » [Script] Convertir format date dans fichiers textes » 24-01-2022 20:06:36

David5647
Réponses : 0
Avant propos

J'ai fait un petit script pour pouvoir changer le format des dates dans des fichiers textes. (Pour les logiciel qui demandent un format spécifique notamment)

Ca fonctionne pour bien mon usage, j'ai essayé de le rendre plus versatile et résilient possible, j'ai ajouté une petite interface en ligne de commande.
Si vous connaissez des programmes qui le font déjà (et mieux) je suis preneur,
si vous avez des suggestions, je suis preneur aussi tongue

Fonctionnement

  1) génération d'une expression régulière : strftime -> regex
  2) identification des dates avec le regex
  3) conversions entre les différents  format de dates avec la lib datetime de python

Utilisation

Nécessite uniquement python3 (pas le lib externes) et votre fichier texte.

protocole:
   1) définir le format des dates (voir le format strftime) en entrée et sortie,
   2) définir les locales (locale -a pour lister celles disponibles sur le système) à utiliser en entré et sortie (par défaut celle de l'utilisateur)
   3) Composer la ligne de commande (seul le format d'entrée et le nom du fichier sont requis)

astuces:
   - utiliser l'argument --in-place pour modifier le fichier, sinon le retour se fait dans le terminal
   - utiliser l'argument --confirm pour demander avant de modifier chaque date

n'oubliez pas de donnez les droits d’exécution (ou faire python3 ma_commande)

 ./repl_date.py -h

usage: repl_date.py [-h] [-l LOCALE_IN] [-L LOCALE_OUT] -f FORMAT_IN [-F FORMAT_OUT] [-i] [-c] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  -l LOCALE_IN, --locale-in LOCALE_IN
                        default to user locale, ex : 'fr_FR.utf8'
  -L LOCALE_OUT, --locale-out LOCALE_OUT
                        default to user locale
  -f FORMAT_IN, --format-in FORMAT_IN
  -F FORMAT_OUT, --format-out FORMAT_OUT
                        default = %d/%m/%Y
  -i, --in-place        edit file in place
  -c, --confirm         ask for confirmation before modify date
  --debug
 



Exemples

cat exemple.txt

Le Jeudi 14 janvier 2022, Thursday 14 January 2022
Mercredi 12 Janvier 2022,
13/01/2022 13/212/2022 32/01/2022 13/01/202
14/01/2022 14 01 2022 14-01-2022


./repl_date.py --locale-in "fr_FR.utf8" --format-in "%A %d %B %Y" --format-out "%d/%m/%Y" exemple.txt

Le 14/01/2022, Thursday 14 January 2022
12/01/2022,
13/01/2022 13/212/2022 32/01/2022 13/01/202
14/01/2022 14 01 2022 14-01-2022


./repl_date.py --locale-in "en_US.utf8" --format-in "%A %d %B %Y" --format-out "%d/%m/%Y" exemple.txt

Le Jeudi 14 janvier 2022, 14/01/2022
Mercredi 12 Janvier 2022,
13/01/2022 13/212/2022 32/01/2022 13/01/202
14/01/2022 14 01 2022 14-01-2022


./repl_date.py --format-in "%d/%m/%Y" --format-out "== le %A %d %B %Y ==" exemple.txt

Le Jeudi 14 janvier 2022, Thursday 14 January 2022
Mercredi 12 Janvier 2022,
== le jeudi 13 janvier 2022 == 13/212/2022 32/01/2022 13/01/202
== le vendredi 14 janvier 2022 == 14 01 2022 14-01-2022
 

#24 Re : Scripts, programmes et robots » [RESOLU] python: variable de controle IntVar set() et get() » 24-01-2022 18:32:56

Tu peux poster ton code (ou un code un peu plus fonctionnel)?
J'avoue que j'ai plus du tout le nez dans tkinter.

Mais à priori, c'est ta fonction qui pose problème.
si tu fais:

self.v_Int_Var= random.randint(1000, 2000)

Tu n'attribue pas une nouvelle valeur à ta "tk.Intvar" mais à la variable "self.v_Int_Var"
Pour le visualiser:


self.v_Int_Var= tk.Intvar(self.fenetre)
type(self.v_Int_Var)
self.v_Int_Var= random.randint(1000, 2000)
type(self.v_Int_Var)
 



Tu dois utiliser la méthode .set de ta tk.IntVar pour modifier sa valeur et non le signe = qui va attribuer un nouvel objet (ici un int) à ta variable

#25 Re : KDE » [RÉSOLU] Actualiser Nautilus sur KDE » 19-01-2022 16:24:35

C'est un dossier normal? Sur ton disque dur local?

Pied de page des forums

Propulsé par FluxBB