#1 Le 12/05/2008, à 09:14
- Sylv@in
wxpython : boite pour choisir un programme à lancer
Hello, world :-D
Tout d'abord je ne sais pas programmer, à par un peu en bash et en php. Mais pas de Python et encore moins de wxPython. Je veux apprendre mais je n'aurai pas vraiment le temps avec juillet/août.
En attendant si quelqu'un peut me dire comment faire il aura tout ma reconnaissance !
Je voudrais faire une petite boîte de dialogue en wxPython : deux boutons, un pour Gimp, un pour Krita, et quand je clique sur le bouton Gimp, la boîte se ferme et Gimp se lance (ou bien Krita si c'est sur le bouton Krita.)
J'ai trouvé un code sur internet que j'ai repris en l'adaptant un peu :
#! /usr/bin/env python
#-*- coding: utf-8 -*-
import wx
from wx.lib.buttons import GenBitmapTextButton
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size = (200, 180))
panel = wx.Panel(self, -1)
gimp = GenBitmapTextButton(self, 1, wx.Bitmap('/usr/share/pixmaps/gnome-gimp.png'), 'Gimp', (25, 20), (150, 60))
gimp.SetBezelWidth(1)
gimp.SetBackgroundColour('#c2e6f8')
krita = GenBitmapTextButton(self, 2, wx.Bitmap('/usr/share/app-install/icons/krita.png'), 'Krita', (25, 85), (150, 60))
krita.SetBezelWidth(1)
krita.SetBackgroundColour('#c2e6f8')
gimp.Bind(wx.EVT_ENTER_WINDOW, self.OnButtonEnter)
gimp.Bind(wx.EVT_LEAVE_WINDOW, self.OnButtonLeave)
krita.Bind(wx.EVT_ENTER_WINDOW, self.OnButtonEnter)
krita.Bind(wx.EVT_LEAVE_WINDOW, self.OnButtonLeave)
self.Centre()
def OnButtonEnter(self, event):
obj = event.GetEventObject()
obj.SetBackgroundColour('#ffdf85')
obj.Refresh()
def OnButtonLeave(self, event):
obj = event.GetEventObject()
obj.SetBackgroundColour('#c2e6f8')
obj.Refresh()
class MyApp(wx.App):
def OnInit(self):
dlg = MyDialog(None, -1, 'Lanceur')
dlg.ShowModal()
dlg.Destroy()
return True
app = MyApp(0)
app.MainLoop()
La boîte de dialogue apparaît bien, stylée comme je veux, mais j'ai beau essayé plein de trucs, je n'arrive pas à faire que la boîte se ferme et le programme se lance quant je clique...
Sinon le but ultime serait que le programme choisi (gimp ou krita) ouvre un fichier passé en argument du script (par exemple : script.py "fichier.png")
Rien que pour ça j'ai eu beaucoup de mal (alors que ça me paraissait tout simple en bash).
Voilà finalement où j'en suis arrivé pour ouvrir le fichier passé en premier argument d'un script python avec gimp :
#! /usr/bin/env python
#-*- coding: utf-8 -*-
import os
import sys
os.execvp('gimp', sys.argv[:2])
C'est tordu ou c'est à peu prêt bon ??
En revanche je n'ai pas trouvé l'équivalent du "&" en bash :
gimp "$1" &
Merci d'avance
#2 Le 12/05/2008, à 14:19
- Sylv@in
Re : wxpython : boite pour choisir un programme à lancer
Bon, j'ai un peu avancé :
j'ai ajouté :
gimp.Bind(wx.EVT_LEFT_DOWN, self.OnButtonClick)
krita.Bind(wx.EVT_LEFT_DOWN, self.OnButtonClick)
et
def OnButtonClick(self, event):
self.Close()
if(event.GetId()==1):
os.execvp('gimp', sys.argv[:2])
else:
os.execvp('krita', sys.argv[:2])
La boîte se ferme bien, Krita ou gimp se lance bien en ouvrant le fichier, sauf que je ne sais toujours pas comment lancer le processus "à part", comme avec "gimp &" en shell.
Donc on va dire que le côté "wx" est réglé, par contre j'aimerai bien qu'on me donne des éclaircissements sur le meilleur moyen de lancer les programme.
Merci
#3 Le 13/05/2008, à 12:37
- Sylv@in
Re : wxpython : boite pour choisir un programme à lancer
Ok, il faut apparemment utiliser "subprocess.Popen()"
Merci quand même
Sinon j'ai laissé tomber wxpython pour pygtk
a+