IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Jouer avec l'icône d'une appli dans la barre de tâches


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut Jouer avec l'icône d'une appli dans la barre de tâches
    Bonjour,

    je me demande s'il est possible en TkInter d'accéder (modifier/redessiner) à l'icône de la barre de tâche d'une appli python en train de tourner.

    Le player mutlimedia de Window fait ça :
    Quand on l'icônifie, on peut encore le piloter avec la mini interface affichée sur son icône de la barre de tâche.

    Y a-t-il un moyen de faire la même chose en python, et si oui, comment ?

    merci d'avance

    Hadrien

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Non.

    Avec une librairie appropriée, oui.

    Dans les exemples fournit avec PyQt il y a quelques scripts pour interagir avec l'interface de son os.

    Pour la zone de notification, je suis sur, pour la barre de tâche, faudra chercher.

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Bon... J'avais laisser ce sujet en instance pour voir si quelqu'un aurais une idée folle. Mais non.
    Comme le dit VinsS : non, ce genre de fonction est géré par l'os. Cela passe donc par des modules.

    Ceci dit lors de ma découverte du module Tkinter j'avais écrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    try:
        import Tkinter as tk
    except:
        import tkinter as tk
     
    class ReductMenu():
        def __init__(self, master, bg=None, fg=None, activefg=None):
            self.master = master
            self.master.etat = 'Normal'
            self.master.bind("<Unmap>", self.callback)
            self.master.after(10, lambda: self.master.bind("<Map>",
                self.callback))
            self.dicitem = {}
            if bg:
                self.bg = bg
            else:
                self.bg = 'gray'
            if fg:
                self.fg = fg
            else:
                self.fg = 'black'
            if activefg:
                self.activefg = activefg
            else:
                self.activefg = 'blue'
     
        def callback(self, event):
            if event.type == '19' and self.master.etat == 'Reduit':
                self.affichemenu(self.master.winfo_pointerxy())
                self.master.iconify()
            elif event.type == '18':
                self.master.etat = 'Reduit'
     
        def showroot(self, event):
            self.master.etat = 'Normal'
            #root.wm_attributes('-alpha', 1.0)
            for widget in (widget for widget in self.master.winfo_children()
                if isinstance(widget, tk.Toplevel)):
                    widget.destroy()
            self.master.deiconify()
     
        def rootquit(self, event):
            self.master.quit()
     
        def positionne(self, widget, x, y):
            widget.update()
            reqw = widget.winfo_reqwidth()
            reqh = widget.winfo_reqheight()
            winw = widget.winfo_screenwidth()
            winh = widget.winfo_screenheight()
            posx = x - (reqw/2)
            if x + reqw/2 > winw:
                posx =  posx - ((x + reqw/2) - winw)
            elif x - reqw/2 < 0:
                posx =  0
            posy = y - reqh/2
            if y + reqh/2 > winh:
                posy =  posy - ((y + reqh/2) - winh)
            elif y - reqh/2 < 0:
                posy =  0
            widget.geometry("%dx%d+%d+%d" % (reqw, reqh, posx, posy))
     
        def affichemenu(self, position):
            x, y = position[0], position[1]
            for widget in (widget for widget in self.master.winfo_children()
                if isinstance(widget, tk.Toplevel)):
                    return
            topmenu = tk.Toplevel(self.master, bg=self.bg)
            topmenu.withdraw()
            ctnfrm = tk.Frame(topmenu, bd=1, relief=tk.RIDGE, bg=self.bg)
            tk.Label(ctnfrm, text='MENU', fg=self.fg,
                bg=self.bg).pack(padx=3, pady=2)
            tk.Frame(ctnfrm, height=2, bd=1, relief=tk.SUNKEN,
                bg=self.bg).pack(fill=tk.X, padx=5, pady=5)
            lab = {}
            tri = []
            for cle in self.dicitem.keys():
                tri.append(cle)
            tri.sort()
            for elems in tri:
                cmd = self.dicitem[elems]
                lab[elems] = tk.Label(ctnfrm, text=elems, fg=self.fg,
                   bg=self.bg)
                lab[elems].pack(padx=3, pady=2)
                lab[elems].bind("<Button-1>", cmd)
                self.focusctrl(lab[elems])
            labelquit = tk.Label(ctnfrm, text='Quitter', fg=self.fg,
                bg=self.bg)
            labelquit.pack(padx=3, pady=2)
            self.focusctrl(labelquit)
            labelrestore = tk.Label(ctnfrm, text='Restaurer',
                fg=self.fg, bg=self.bg)
            labelrestore.pack(padx=3, pady=2)
            self.focusctrl(labelrestore)
            ctnfrm.pack(padx=3, pady=2)
            labelquit.bind("<Button-1>", self.rootquit)
            labelrestore.bind("<Button-1>", self.showroot)
            self.positionne(topmenu, x, y)
            topmenu.overrideredirect(True)
            topmenu.deiconify()
     
        def focusctrl(self, widget):
            widget.bind("<Leave>", lambda event=None: self.notactive(
                widget))
            widget.bind("<Enter>", lambda event=None: self.isactive(widget))
     
        def isactive(self, widget):
            widget['fg']=self.activefg
            widget.update()
     
        def notactive(self, widget):
            widget['fg']=self.fg
            widget.update()
     
        def additem(self, name, cb):
            self.dicitem[name] = cb
     
        def delitem(self, name):
            del self.dicitem[name]
     
    if __name__ == "__main__":
        root = tk.Tk()
        root.title('Test')
        rm = ReductMenu(root, bg='brown', fg='green', activefg='blue')
        # Options
        def opt1cb(event):
            print 'Option 1'
     
        def opt2cb(event):
            print 'Option 2'
     
        def opt3cb(event):
            print 'Option 3'
     
        rm.additem('Option 1', opt1cb)
        rm.additem('Option 2', opt2cb)
        rm.additem('Option 3', opt3cb)
        rm.delitem('Option 2')
     
        root.mainloop()
    C'est sans doute un placebo mais cela répond 'généralement' à la question.
    C'est complètement perfectible (par exemple cela ne fait que réagir à l'event, cela ne l'intercepte pas) et non testé (Si: Sous Linux. Mais l'exemple précédent en montre la limite).
    Si cela te donne une idée...

    Bon code

    Edit: Python 2/3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        def opt1cb(event):
            print('Option 1')
     
        def opt2cb(event):
            print('Option 2')
     
        def opt3cb(event):
            print('Option 3')

Discussions similaires

  1. [AC-2010] Masquer l'appli dans la barre des tâches win7
    Par ThieBEN dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/06/2014, 17h02
  2. Réduire une fenêtre dans la barre des tâches
    Par Invité dans le forum PyQt
    Réponses: 7
    Dernier message: 10/06/2009, 04h53
  3. Réponses: 5
    Dernier message: 12/03/2008, 09h55
  4. Ajouter une icône d'une application dans le barre des tâches
    Par Lorponos dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 13/05/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo