Gui pour ligne de commande

Contenu du snippet

j'ai fait ce code pour imiter la meniere de faire de wm. l'utilisation des %a dans les menu est surpuissant.

Source / Exemple :


#!/usr/bin/env python
#Author : croqmort@ifrance.com
#licence : standard GNU
#if you add some features, please send me that ;)

from Tkinter import *
from sys import stdout, argv, exit
from os import system

class Dialog(Frame):
    def enter(self, event, widget):
        widget["bg"] = "#DDF"
    def leave(self, event, widget):
        widget["bg"] = "#FFF"
    def ok_event(self, event=None):
        self.how = 1
        self.quit()
    def cancel_event(self, event=None):
        self.quit()
    def go(self):
        self.mainloop()
        if self.how == 1:
            l = []
            for i in self.entry_list:
                l.append(i.get())
            return l
        else: return []
    def addEntry(self, msg, default):
        frame = Frame(self.entryFrame)
        Label(frame, text=msg).pack(side=LEFT)
        entry = Entry(frame)
        def tmp_enter(event=None):
            self.enter(event, entry)
        def tmp_leave(event=None):
            self.leave(event, entry)
        entry.bind('<Enter>', tmp_enter)
        entry.bind('<Leave>', tmp_leave)
        entry["bg"] = "#FFF"
        entry["fg"] = "#000"
        entry.insert(END,default)
        entry.pack(side=RIGHT, fill=X, expand=1)
        self.entry_list.append(entry)
        frame.pack(side=BOTTOM,fill=X)
    def colorButton(self, widget):
        widget["background"] = "#DDF"
        widget["foreground"] = "black"
        widget["activebackground"] = "#AAF"
        widget["activeforeground"] = "black"
    def __init__(self, title="Entry Dialog"):
        Frame.__init__(self)
        self.how = 0
        self.pack(fill=BOTH, expand=1)
        self.master.title(title)
        self.master.iconname(title)
        self.entry_list = []
        self.entryFrame = Frame(self)
        self.entryFrame.pack(side=TOP, fill=X)
        self.buttonFrame = Frame(self)
        self.buttonFrame.pack(side=BOTTOM)
        self.buttonOk = Button(self.buttonFrame)
        self.buttonOk["text"] = "Ok"
        self.buttonOk["command"] = self.ok_event
        self.buttonOk.pack(side=RIGHT)
        self.colorButton(self.buttonOk)
        self.buttonCancel = Button(self.buttonFrame)
        self.buttonCancel["text"] = "Cancel"
        self.buttonCancel["command"] = self.cancel_event
        self.buttonCancel.pack(side=LEFT)
        self.colorButton(self.buttonCancel)
        self.master.protocol('WM_DELETE_WINDOW', self.quit)

def get_pct_a(s):
    l = []
    i = s.find("%a")
    while i != -1:
        n = 0
        while (i-n)!=0 and s[i-(n+1)]=='\\':
            n = n + 1
        if n%2 == 1:
            i = s.find("%a",i+2)
            continue
        ibs = s.find("(",i+2)
        ibe = s.find(")",ibs)
        if ibs == -1 or ibe == -1 or ibs!=i+2:
            i = s.find("%a",i+2)
            continue
        ic = s.find(",",ibs,ibe)
        if ic == -1: l.append((s[ibs+1:ibe].strip(),""))
        else: l.append((s[ibs+1:ic].strip(),s[ic+1:ibe].strip()))
        i = s.find("%a",i+2)
    return l

def replace_pct_a(s, l):
    w = i = s.find("%a")
    j = 0
    while i != -1:
        n = 0
        while (i-n) != 0 and s[i-(n+1)] == '\\':
            n = n + 1
        if n%2 == 1:
            w = i + 2
            i = s.find("%a", w)
            continue
        ibs = s.find("(", i + 2)
        ibe = s.find(")", ibs)
        if ibs == -1 or ibe == -1 or ibs != i+2:
            w = i + 2
            i = s.find("%a", w)
            continue
        s = s[:i] + l[j] + s[ibe+1:]
        w = i + len(l[j])
        j = j + 1
        i = s.find("%a",w)
    return s

usage = """
menu_wm_a.py command title
command can contain some "%a(text,default)"
a dialog box with all this entry appeared and all occurence of %a is replaced by your reply
command is launch
"""

usage_fr = """
menu_wm_a.py commande titre
commande peut contenir plusieurs "%a(texte, defaut)"
une boite de dialogue est cree contenant une entree pour chaque %a
toute les occurences de %a sont remplace par votre reponse puis commande est executee
"""

if len(argv) < 2:
    print usage_fr
    exit(0)
l = get_pct_a(argv[1])
if len(l) != 0:
    d = Dialog(argv[2])
    for (text, default) in l:
        d.addEntry(text, default)
    r = d.go()
    if len(r) != len(l): exit(0)
    str = replace_pct_a(argv[1],r)
else:
    str = argv[1]
system(str)

Conclusion :


voila, ça peut toujours servir

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.