Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- # -*- python -*-
- import sys
- import os
- from os.path import join,getsize,exists
- import tkMessageBox
- import tkFileDialog
- py2 = py30 = py31 = False
- version = sys.hexversion
- if version >= 0x020600F0 and version < 0x03000000 :
- py2 = True # Python 2.6 ou 2.7
- from Tkinter import *
- import ttk
- import tkFont
- elif version >= 0x03000000 and version < 0x03010000 :
- py30 = True
- from tkinter import *
- import ttk
- elif version >= 0x03010000:
- py31 = True
- from tkinter import *
- import tkinter.ttk as ttk
- else:
- print ("""
- Votre version de Python ne supporte pas les widgets ttk...
- Il faut une version >= 2.6 pour executer les modules PAGE.
- """)
- sys.exit()
- def vp_start_gui():
- '''Point de depart lorsque le module est la routine principale.'''
- global val, w, racine
- racine = Tk()
- racine.title('Rechercher')
- racine.geometry('600x525+413+86')
- initialise_var_Tk()
- w = Rechercher(racine)
- init()
- racine.mainloop()
- w = None
- def create_Rechercher(racine):
- '''Point de depart lorsque le module est importe par un autre programme.'''
- global w, w_win
- if w: # pour avoir une seule instance de la fenetre.
- return
- w = Toplevel(racine)
- w.title('Rechercher')
- w.geometry('600x525+413+86')
- initialise_var_Tk()
- w_win = Rechercher(w)
- init()
- return w_win
- def destroy_Rechercher ():
- global w
- w.destroy()
- w = None
- def initialise_var_Tk():
- # Ce sont les variables Tk utilisees par Tkinter qui doivent
- # etre definies avant la creation des widgets qui les utilisent.
- global CheminFichier
- CheminFichier = StringVar()
- global VchkAVI
- VchkAVI = StringVar()
- global VchkMKV
- VchkMKV = StringVar()
- global VchkMP3
- VchkMP3 = StringVar()
- global VchkMV4
- VchkMV4 = StringVar()
- global VchkOGG
- VchkOGG = StringVar()
- global exts, ListeFichiers
- exts = []
- CheminFichier=StringVar()
- ListeFichiers=[]
- #-------------
- global CurseurOccupe,PreCurseurOccupe,WidgetsOccupes
- CurseurOccupe = 'watch'
- PreCurseurOccupe = None
- WidgetsOccupes = (racine, )
- #-------------
- def btnClicQuitter(p1) :
- sys.exit()
- def btnClicAller(p1) :
- #pass
- debutOccupation()
- ConstruireExts()
- chemin = CheminFichier.get()
- e1 = tuple(exts)
- Parcourir(chemin,e1)
- ChargerDonnees()
- finOccupation()
- def btnClicCheminRecherche(p1) :
- #pass
- chemin = tkFileDialog.askdirectory() #**self.file_opt)
- CheminFichier.set(chemin)
- def init():
- #pass
- # se lance apres la creation des fenetres et des widgets...
- global VueArborescente
- InitialiserCases()
- VueArborescente = w.VueArboAscenseur1
- InitialiserVueArborescente()
- def InitialiserCases():
- VchkAVI.set('0')
- VchkMKV.set('0')
- VchkMP3.set('0')
- VchkMV4.set('0')
- VchkOGG.set('0')
- def ConstruireExts():
- if VchkAVI.get() == '1':
- exts.append(".avi")
- if VchkMKV.get() == '1':
- exts.append(".mkv")
- if VchkMP3.get() == '1':
- exts.append(".mp3")
- if VchkMV4.get() == '1':
- exts.append(".mv4")
- if VchkOGG.get() == '1':
- exts.append(".ogg")
- def btnClicCheminRecherche(p1) :
- chemin = tkFileDialog.askdirectory() #**self.file_opt)
- CheminFichier.set(chemin)
- def Parcourir(chemin,extensions):
- rcntr = 0
- liste = []
- for racine, reps, fics in os.walk(chemin):
- rcntr += 1 # nombre de repertoires parcourus
- for fic in [f for f in fics if f.endswith(extensions)]:
- liste.append(fic)
- liste.append(racine)
- ListeFichiers.append(liste)
- liste=[]
- def InitialiserVueArborescente():
- global TitresColonnes
- TitresColonnes = ['Nom fichier','Chemin']
- VueArborescente.configure(columns=TitresColonnes,
- show="headings")
- for col in TitresColonnes:
- VueArborescente.heading(col, text = col.title(),
- command = lambda c = col: sortby(VueArborescente, c, 0))
- ## ajuste la largeur de colonne au titre
- VueArborescente.column(col, width = tkFont.Font().measure(col.title()))
- def EffacerDonnees():
- for c in VueArborescente.get_children(''):
- VueArborescente.delete(c)
- def ChargerDonnees():
- global TitresColonnes
- for c in ListeFichiers:
- VueArborescente.insert('','end',values=c)
- # ajuste la largeur de colonne si necessaire pour chaque valeur
- for ix, val in enumerate(c):
- larg_col = tkFont.Font().measure(val)
- if VueArborescente.column(TitresColonnes[ix],width=None)<larg_col:
- VueArborescente.column(TitresColonnes[ix], width=larg_col)
- def debutOccupation(nouveaucurseur=None):
- global PreCurseurOccupe
- if not nouveaucurseur:
- nouveaucurseur = CurseurOccupe
- nouveauPreCurseursOccupes = {}
- for composant in WidgetsOccupes:
- nouveauPreCurseursOccupes[composant] = composant['cursor']
- composant.configure(cursor=nouveaucurseur)
- composant.update_idletasks()
- PreCurseurOccupe = (nouveauPreCurseursOccupes, PreCurseurOccupe)
- def finOccupation():
- global PreCurseurOccupe
- if not PreCurseurOccupe:
- return
- ancienPreCurseursOccupes = PreCurseurOccupe[0]
- PreCurseurOccupe = PreCurseurOccupe[1]
- for composant in WidgetsOccupes:
- try:
- composant.configure(cursor=ancienPreCurseursOccupes[composant])
- except KeyError:
- pass
- composant.update_idletasks()
- class Rechercher:
- def __init__(self, principale=None):
- # regle le fond de la fenetre principale suivant
- # le style actuel
- style = ttk.Style()
- theme = style.theme_use()
- default = style.lookup(theme, 'background')
- principale.configure(background=default)
- self.Fenetre1 = Frame (principale)
- self.Fenetre1.place(relx=0.0,rely=0.0,relheight=0.1,relwidth=0.99)
- self.Fenetre1.configure(relief=GROOVE)
- self.Fenetre1.configure(borderwidth="2")
- self.Fenetre1.configure(relief="groove")
- self.btnQuitter = Button (self.Fenetre1)
- self.btnQuitter.place(relx=0.86,rely=0.36,height=27,width=49)
- self.btnQuitter.configure(text='''Quitter''')
- self.btnQuitter.bind('<Button-1>',btnClicQuitter)
- self.Fenetre2 = Frame (principale)
- self.Fenetre2.place(relx=0.0,rely=0.11,relheight=0.35,relwidth=0.54)
- self.Fenetre2.configure(relief=GROOVE)
- self.Fenetre2.configure(borderwidth="2")
- self.Fenetre2.configure(relief="groove")
- self.Label1 = Label (self.Fenetre2)
- self.Label1.place(relx=0.03,rely=0.05,height=19,width=55)
- self.Label1.configure(text='''Chemin :''')
- self.txtChemin = Entry (self.Fenetre2)
- self.txtChemin.place(relx=0.03,rely=0.16,relheight=0.11,relwidth=0.7)
- self.txtChemin.configure(textvariable=CheminFichier)
- self.btnCheminRecherche = Button (self.Fenetre2)
- self.btnCheminRecherche.place(relx=0.74,rely=0.16,height=27,width=38)
- self.btnCheminRecherche.configure(text='''...''')
- self.btnCheminRecherche.bind('<Button-1>',btnClicCheminRecherche)
- self.chkAVI = Checkbutton (self.Fenetre2)
- self.chkAVI.place(relx=0.15,rely=0.43,relheight=0.11,relwidth=0.14)
- self.chkAVI.configure(text='''.avi''')
- self.chkAVI.configure(variable=VchkAVI)
- self.chkMKV = Checkbutton (self.Fenetre2)
- self.chkMKV.place(relx=0.15,rely=0.54,relheight=0.11,relwidth=0.17)
- self.chkMKV.configure(text='''.mkv''')
- self.chkMKV.configure(variable=VchkMKV)
- self.chkMV4 = Checkbutton (self.Fenetre2)
- self.chkMV4.place(relx=0.15,rely=0.65,relheight=0.11,relwidth=0.18)
- self.chkMV4.configure(text='''.mv4''')
- self.chkMV4.configure(variable=VchkMV4)
- self.chkMP3 = Checkbutton (self.Fenetre2)
- self.chkMP3.place(relx=0.58,rely=0.54,relheight=0.11,relwidth=0.18)
- self.chkMP3.configure(text='''.mp3''')
- self.chkMP3.configure(variable=VchkMP3)
- self.chkOGG = Checkbutton (self.Fenetre2)
- self.chkOGG.place(relx=0.58,rely=0.65,relheight=0.11,relwidth=0.16)
- self.chkOGG.configure(text='''.ogg''')
- self.chkOGG.configure(variable=VchkOGG)
- self.btnALLER = Button (self.Fenetre2)
- self.btnALLER.place(relx=0.4,rely=0.81,height=27,width=55)
- self.btnALLER.configure(text='''ALLER !''')
- self.btnALLER.bind('<Button-1>',btnClicAller)
- self.Fenetre3 = Frame (principale)
- self.Fenetre3.place(relx=0.0,rely=0.48,relheight=0.5,relwidth=0.94)
- self.Fenetre3.configure(relief=GROOVE)
- self.Fenetre3.configure(borderwidth="2")
- self.Fenetre3.configure(relief="groove")
- self.VueArboAscenseur1 = ScrolledTreeView (self.Fenetre3)
- self.VueArboAscenseur1.place(relx=0.02,rely=0.04,relheight=0.96
- ,relwidth=0.97)
- self.VueArboAscenseur1.configure(columns="Col1")
- self.VueArboAscenseur1.configure(takefocus="ttk::takefocus")
- self.VueArboAscenseur1.heading("#0",text="Arborescence")
- self.VueArboAscenseur1.heading("#0",anchor="center")
- self.VueArboAscenseur1.column("#0",width="266")
- self.VueArboAscenseur1.column("#0",minwidth="20")
- self.VueArboAscenseur1.column("#0",stretch="1")
- self.VueArboAscenseur1.column("#0",anchor="w")
- self.VueArboAscenseur1.heading("Col1",text="Col1")
- self.VueArboAscenseur1.heading("Col1",anchor="center")
- self.VueArboAscenseur1.column("Col1",width="267")
- self.VueArboAscenseur1.column("Col1",minwidth="20")
- self.VueArboAscenseur1.column("Col1",stretch="1")
- self.VueArboAscenseur1.column("Col1",anchor="w")
- # Le code suivant est ajoute pour simplifier les widgets avec ascenseurs.
- class AutoScroll(object):
- '''Configure les ascenseurs pour un widget.'''
- def __init__(self, principale):
- vsb = ttk.Scrollbar(principale, orient='vertical', command=self.yview)
- hsb = ttk.Scrollbar(principale, orient='horizontal', command=self.xview)
- self.configure(yscrollcommand=self._autoscroll(vsb),
- xscrollcommand=self._autoscroll(hsb))
- self.grid(column=0, row=0, sticky='nsew')
- vsb.grid(column=1, row=0, sticky='ns')
- hsb.grid(column=0, row=1, sticky='ew')
- principale.grid_columnconfigure(0, weight=1)
- principale.grid_rowconfigure(0, weight=1)
- # Copie les methodes de geometrie de la fenetre principale (repris de ScrolledText.py)
- methods = Pack.__dict__.keys() + Grid.__dict__.keys() \
- + Place.__dict__.keys()
- for meth in methods:
- if meth[0] != '_' and meth not in ('config', 'configure'):
- setattr(self, meth, getattr(principale, meth))
- @staticmethod
- def _autoscroll(sbar):
- '''Cache et montre les ascenseurs au besoin.'''
- def wrapped(first, last):
- first, last = float(first), float(last)
- if first <= 0 and last >= 1:
- sbar.grid_remove()
- else:
- sbar.grid()
- sbar.set(first, last)
- return wrapped
- def __str__(self):
- return str(self.principale)
- def _create_container(func):
- '''Cree une fenetre ttk avec un parent donne, et utilise cette nouvelle fenetre
- pour placer les ascenseurs et le widget.'''
- def wrapped(cls, principale, **kw):
- container = ttk.Frame(principale)
- return func(cls, container, **kw)
- return wrapped
- class ScrolledTreeView(AutoScroll, ttk.Treeview):
- '''Un widget vue arborescente standard ttk avec ascenseurs qui apparaissent
- automatiquement si necessaire.'''
- @_create_container
- def __init__(self, principale, **kw):
- ttk.Treeview.__init__(self, principale, **kw)
- AutoScroll.__init__(self, principale)
- if __name__ == '__main__':
- vp_start_gui()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement