Advertisement
Guest User

FCM86-Python 55-GenerateurMotifsPointDeCroix-GUI

a guest
Dec 19th, 2014
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.42 KB | None | 0 0
  1. #======================================================    
  2. #  Generateur de motifs de point de croix
  3. #  cspg.py
  4. #  Ecrit par G.D. Walters
  5. #  Cree pour Full Circle Magazine numeros 85, 86, 87, 88
  6. #  FCM 86 - Partie 55 - Interface graphique
  7. #======================================================    
  8. from Tkinter import *
  9. import tkFileDialog
  10. import tkCommonDialog
  11. import tkMessageBox
  12. import ttk
  13. from PIL import Image,ImageTk,ImageOps
  14. import Pmw
  15. import apsw  # acces a la base de donnees
  16. import math  # bibliotheque mathematique
  17. import sys
  18.  
  19. class XStitch:
  20.     def __init__(self, principal):
  21.         self.formatsImages = [
  22.         ('JPEG / JFIF','*.jpg'),
  23.         ('Portable Network Graphics','*.png'),
  24.         ('CompuServer GIF','*.gif'),
  25.         ('Windows Bitmap','*.bmp'),
  26.         ('Tous les types *.*','*.*'),
  27.         ]
  28.  
  29.         self.openimage = PhotoImage(file='open.gif')
  30.         self.DefaultImage =ImageTk.PhotoImage(self.Apercu("default.jpg",450,450))
  31.         #-------------------------------------------
  32.         #            Definitions globales
  33.         #-------------------------------------------
  34.         #          pour l'interface graphique
  35.         global NomFichierOriginal
  36.         NomFichierOriginal = StringVar()
  37.         global NombreCouleursOriginal
  38.         NombreCouleursOriginal = StringVar()
  39.         global TailleOriginal
  40.         TailleOriginal = StringVar()
  41.         global ComboTaillePoints
  42.         ComboTaillePoints = IntVar()
  43.         global ComboTaille
  44.         ComboTaille = StringVar()
  45.         global LargeurTissu
  46.         LargeurTissu = DoubleVar()
  47.         global HauteurTissu
  48.         HauteurTissu = DoubleVar()
  49.         global MaxCouleurs
  50.         MaxCouleurs = IntVar()
  51.         global TailleBordure
  52.         TailleBordure = DoubleVar()
  53.         global CouleursTraitees
  54.         CouleursTraitees = StringVar()
  55.         global TailleTraitee
  56.         TailleTraitee = StringVar()
  57.         global CouleurDMC
  58.         CouleurDMC = StringVar()
  59.         #-------------------------------------------
  60.         global AfficherGrille
  61.         AfficherGrille = True
  62.         global ImageTraitee
  63.         ImageTraitee = ""
  64.         global GrilleImage
  65.         GrilleImage = ""
  66.         global couleurFond1
  67.         couleurFond1 = (120,)*3
  68.         global couleurFond2
  69.         couleurFond2 = (0,)*3
  70.         global PretPourTraitement
  71.         PretPourTraitement = False
  72.         #-------------------------
  73.         self.OuvrirBase()
  74.         self.FabriquerMenu(principal)
  75.         frm = self.ConstruireWidgets(principal)
  76.         self.PlacerWidgets(frm)
  77.        
  78. #======================================================        
  79. #               DEBUT DEFINITION INTERFACE
  80. #======================================================
  81.     def FabriquerMenu(self,principal):
  82.         menu = Menu(principal)
  83.         racine.config(menu=menu)
  84.         menuFichier = Menu(menu, tearoff=0)
  85.         Traitement = Menu(menu,tearoff=0)
  86.         Aide = Menu(menu,tearoff=0)
  87.  
  88.         menu.add_cascade(label="Fichier", menu=menuFichier)
  89.         menu.add_cascade(label="Traitement",menu=Traitement)
  90.         menu.add_cascade(label="Aide",menu=Aide)
  91.         #-------------------------------------------
  92.         #              Menu Fichier
  93.         #-------------------------------------------
  94.         menuFichier.add_command(label="Nouveau")
  95.         menuFichier.add_command(label="Ouvrir", command=self.RecupererNomFichier)
  96.         menuFichier.add_command(label="Sauver", command=self.SauverFichier)
  97.         menuFichier.add_separator()
  98.         menuFichier.add_command(label="Quitter", command=self.Quitter)
  99.         #-------------------------------------------
  100.         #               Menu Traitement
  101.         #-------------------------------------------
  102.         Traitement.add_command(label="Tous",command=self.Traitement)
  103.         #-------------------------------------------
  104.         #                Menu Aide
  105.         #-------------------------------------------
  106.         Aide.add_command(label="Aide",command=self.AfficherAide)
  107.         Aide.add_separator()
  108.         Aide.add_command(label="A propos",command=self.AfficherApropos)
  109.        
  110.     def ConstruireWidgets(self,principal):
  111.         self.frame = Frame(principal,width=900,height=850)
  112.         # ---------------- FENETRE HAUT ---------------------
  113.         self.frm1 = Frame(self.frame,width=900,height=100,bd=4,relief=GROOVE)
  114.         self.label1 = Label(self.frm1,text = "Fichier original : ")
  115.         self.entNomFic = Entry(self.frm1,width=50,textvariable=NomFichierOriginal)
  116.         self.btnNomFic = Button(self.frm1,width=28,image=self.openimage,command=self.RecupererNomFichier)
  117.         self.label2 = Label(self.frm1,text = "Nb couleurs de l'original : ")
  118.         self.lblNombreCouleursOriginal = Label(self.frm1,text="",width=10,textvariable=NombreCouleursOriginal)
  119.         self.label3 = Label(self.frm1,text = "Taille de l'original : ")
  120.         self.lblTailleOriginal = Label(self.frm1,text="",width=10,textvariable=TailleOriginal)
  121.         # --------------- FENETRE MILIEU --------------------
  122.         self.frm2 = Frame(self.frame,width=900,height=160,bd=4,relief=GROOVE)
  123.         self.lbl4 = Label(self.frm2,text="Taille des points de l'aida : ")
  124.         self.lbl5 = Label(self.frm2,text="Taille du tissu Aida : ")
  125.         self.TCombobox1 = ttk.Combobox(self.frm2,textvariable=ComboTaillePoints,width=8)
  126.         self.TCombobox1.bind('<<ComboboxSelected>>', self.ChoixTaillePoints)
  127.         self.TCombobox1['values'] = (7,10,11,12,14,16,18,22)
  128.         self.TCombobox2 = ttk.Combobox(self.frm2,textvariable=ComboTaille,width = 8)
  129.         self.TCombobox2.bind('<<ComboboxSelected>>',self.ChoixTailleAida)
  130.         self.TCombobox2['values'] = ("12x18","15x18","30")
  131.         self.lbl6 = Label(self.frm2,text="Nb max de couleurs : ")
  132.         self.entMaxCouleurs = Entry(self.frm2,textvariable=MaxCouleurs,width=3)
  133.         self.lbl7 = Label(self.frm2,text="Taille bordure : ")
  134.         self.entTailleBordure = Entry(self.frm2,textvariable=TailleBordure,width = 8)
  135.         self.frmLine = Frame(self.frm2,width=6,height=80,bd=3,relief="raised")
  136.         self.lbl8 = Label(self.frm2,text="Couleurs traitees : ")
  137.         self.lbl9 = Label(self.frm2,text="Nb points traites : ")
  138.         self.lblCouleursTraitees=Label(self.frm2,width=10,textvariable=CouleursTraitees,justify=LEFT)
  139.         self.lblTailleTraitee=Label(self.frm2,width=10,textvariable=TailleTraitee,justify=LEFT)
  140.         self.btnDoIt = Button(self.frm2,text="Traitement",width=11,command = self.Traitement)
  141.         self.btnAfficherGrille = Button(self.frm2,text="Masquer grille",width=11,command=self.AfficherMasquerGrille)
  142.         self.btnCreerPDF=Button(self.frm2,text="Creer PDF",width=11,command=self.CreerPDF)
  143.         ComboTaillePoints.set(14)
  144.         ComboTaille.set("15x18")
  145.         LargeurTissu.set(15)
  146.         HauteurTissu.set(18)
  147.         MaxCouleurs.set(50)
  148.         TailleBordure.set(1.0)        
  149.         # --------------- FENETRE BAS -----------------------
  150.         self.frm3 = Frame(self.frame,width=450,height=450,bd=4,relief=GROOVE)
  151.         self.lblImageL = Label(self.frm3,image=self.DefaultImage,height=400,width=400,borderwidth=2,relief=GROOVE)
  152.         self.lblImageR = Label(self.frm3,image=self.DefaultImage,height=400,width=400,borderwidth=2,relief=GROOVE)
  153.         #---------------- FENETRE COTE ----------------------
  154.         self.frm4 = Frame(self.frame,width = 300,height=580,bd=4,relief=GROOVE)
  155.         # Cree la fenetre deroulante
  156.         self.sf = Pmw.ScrolledFrame(self.frm4,
  157.                 labelpos = 'n', label_text = 'Liste couleurs traitees',
  158.                 usehullsize = 1,
  159.                 hull_width = 300,
  160.                 hull_height = 567,)
  161.         return self.frame
  162.        
  163.     def PlacerWidgets(self,fenetre):
  164.         fenetre.grid(column = 0, row = 0)
  165.         # ---------------- FENETRE HAUT ---------------------
  166.         self.frm1.grid(column=0,row=0,rowspan=2,sticky="new")
  167.         self.label1.grid(column=0,row=0,sticky='w')
  168.         self.entNomFic.grid(column=1,row=0,sticky='w',columnspan = 5)
  169.         self.btnNomFic.grid(column=7,row = 0,sticky='w')
  170.         self.label2.grid(column=9,row=0,sticky='w',padx=10)
  171.         self.lblNombreCouleursOriginal.grid(column=10,row=0,sticky='w')
  172.         self.label3.grid(column=9,row=1,sticky='w',padx=10,pady=5)
  173.         self.lblTailleOriginal.grid(column=10,row=1,sticky='w')
  174.         # ---------------- FENETRE MILIEU -------------------
  175.         self.frm2.grid(column=0,row=2,rowspan=2,sticky="new")
  176.         self.lbl4.grid(column=0,row=0,sticky="new",pady=5)
  177.         self.lbl5.grid(column=0,row=1,sticky="new")
  178.         self.TCombobox1.grid(column=1,row=0,sticky="new",pady=5)
  179.         self.TCombobox2.grid(column=1,row=1,sticky="new")
  180.         self.lbl6.grid(column=2,row = 0,sticky="new",padx=5,pady=5)
  181.         self.entMaxCouleurs.grid(column=3,row=0,sticky="new",pady=5)
  182.         self.lbl7.grid(column=2,row=1,sticky='new',padx=5)
  183.         self.entTailleBordure.grid(column=3,row=1,sticky='new')
  184.         self.frmLine.grid(column=4,row=0,rowspan=2,sticky='new',padx=15)
  185.         self.lbl8.grid(column=5,row=0,sticky='new',pady=5)
  186.         self.lbl9.grid(column=5,row=1,sticky='new')
  187.         self.lblCouleursTraitees.grid(column=6,row=0,sticky='w')
  188.         self.lblTailleTraitee.grid(column=6,row=1,sticky='new')
  189.         self.btnDoIt.grid(column=7,row=0,sticky='e',padx=5,pady = 5)
  190.         self.btnAfficherGrille.grid(column=7,row=1,sticky='e',padx=5,pady = 5)
  191.         self.btnCreerPDF.grid(column=8,row=0,rowspan=2,sticky='ew',padx=10)
  192.         # ---------------- FENETRE BAS ----------------------
  193.         self.frm3.grid(column=0,row=4,sticky="nsew")
  194.         self.lblImageL.grid(column=0,row=0,sticky="w")
  195.         self.lblImageR.grid(column=1,row=0,sticky="e")
  196.         # ---------------- FENETRE COTE ---------------------
  197.         self.frm4.grid(column=2,row=0,rowspan=12,sticky="new")
  198.         self.sf.grid(column=0,row=1)
  199.         self.sfFrame = self.sf.interior()
  200.         self.lblch1 = Label(self.sfFrame,text="    Original")
  201.         self.lblch2 = Label(self.sfFrame,text="    DMC")
  202.         self.lblch3 = Label(self.sfFrame,text="Nom/Numero")
  203.         self.lblch1.grid(column=0,row=0,sticky='w')
  204.         self.lblch2.grid(column=1,row=0,sticky='w')
  205.         self.lblch3.grid(column=2,row=0,sticky="w")
  206.        
  207. #======================================================
  208. #               FIN DEFINITION INTERFACE
  209. #======================================================    
  210.  
  211.        
  212.     def RecupererNomFichier(self):
  213.         pass
  214.        
  215.     def SauverFichier(self):
  216.         pass
  217.        
  218.     def AfficherAide(self):
  219.         pass
  220.        
  221.     def AfficherApropos(self):
  222.         pass
  223.        
  224.     def Quitter(self):
  225.         sys.exit()        
  226.        
  227.     def OuvrirBase(self):
  228.         pass
  229.        
  230.     def AfficherMasquerGrille(self):
  231.         pass
  232.            
  233.     def ChoixTaillePoints(self,p):
  234.         pass
  235.        
  236.     def ChoixTailleAida(self,p):
  237.         pass
  238.        
  239.     def Traitement(self):
  240.         pass
  241.  
  242.     def CreerPDF(self):
  243.         pass
  244.            
  245. #======================================================
  246. #               Fonctions de traitement
  247. #======================================================    
  248.        
  249.     def Apercu(self,fichier,tailleH,tailleV):
  250.         taille = tailleH,tailleV
  251.         posExt = fichier.rfind(".")
  252.         fichierSortie = fichier[:posExt] + ".thumbnail"
  253.         im = Image.open(fichier)
  254.         im.thumbnail(taille)
  255.         im.save(fichierSortie,"JPEG")
  256.         return im
  257.        
  258.     def InfoOriginal(self,fichier):
  259.         pass
  260.    
  261.     def RecupererNbCouleurs(self,fichier):
  262.         pass
  263.        
  264.     def RecupererHauteurLargeur(self,fichier):
  265.         pass
  266.  
  267.     def RecupererHauteurLargeur2(self,fichier):
  268.         pass
  269.        
  270.     def RecupererCouleurs(self,image):
  271.         pass
  272.                    
  273.     def Pixeliser(self,im,taillePixel):
  274.         pass
  275.  
  276.     def ReduireCouleurs(self,NomImage):
  277.         pass
  278.  
  279.     def DessinerLignes(self,im,taillePixel):
  280.         pass
  281.            
  282.     def DessinerLignes2(self,im,taillePixel):
  283.         pass
  284.                                
  285.     def Rgb2Hex(self,rgb):
  286.         pass
  287.        
  288.     def RemplirListeDeroulante(self,nomFic):
  289.         pass
  290.              
  291.     def TrouverMeilleureDistance(self,r1,g1,b1):
  292.         # dist = math.sqrt(((r1-r2)**2) + ((g1-g2)**2) + ((b1-b2)**2))
  293.         pass
  294.  
  295. racine = Tk()
  296. racine.title("Generateur de motifs de point de croix")
  297. test = XStitch(racine)
  298. racine.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement