Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

#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 lol

Sinon j'ai laissé tomber wxpython pour pygtk

a+