#1 Le 18/03/2011, à 13:48
- snowvinc
Besoin d'aide pour application en python
Bonjour,
Alors voila je souhaite créer un logiciel de type Griboull_i en python. Je me heurte à plusieurs probleme.
Je débute totalement en python.
La version de python que j'utilise est la 2.6.6 et comme je ne savais quelle version de wxpyhton installer j'ai mis la version 2.8
Pour l'instant j'ai créer ca:
import wx
class fenetre(wx.Frame):
def __init__(self, parent, id, titre):
wx.Frame.__init__(self, parent, id, titre)
self.amount = 20
self.SetTransparent(self.amount)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
conteneur = wx.BoxSizer(wx.VERTICAL)
conteneur2 = wx.BoxSizer(wx.HORIZONTAL)
boutonD = wx.Button(self, wx.ID_dessiner)
boutonS = wx.Button(self, wx.ID_surligner)
conteneur2.Add(boutonD)
conteneur2.Add(boutonS)
conteneur.Add(conteneur2)
self.SetSizerAndFit(conteneur)
self.Centre()
def OnCloseWindow(self, evt):
self.Destroy()
class MonAppli (wx.App):
def OnInit(self):
frm = fenetre(None, wx.ID_ANY, 'transparent')
frm.Show(True)
return True
app = MonAppli()
app.MainLoop()
Alors plusieur choses:
- A l'exécution geany me retourne le code erreur que vous pouvez voir sur l'image ci dessous
- Si je commentes les ligne 9 a 17 mon programme se lance sans erreur mais n'applique pas la transparence
Voilà. Ça fais deux à trois jours que je suis là dessus et malgré toutes mes recherches j'ai du mal.
Merci de m'aider a sortir de là. De mon coter je continue a progresser en python pour eviter ce genre d'erreurs qui je pense sont primaires.
Dernière modification par snowvinc (Le 18/03/2011, à 13:58)
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#2 Le 18/03/2011, à 13:59
- tshirtman
Re : Besoin d'aide pour application en python
bonjour
boutonD = wx.Button(self, wx.ID_dessiner)
boutonS = wx.Button(self, wx.ID_surligner)
wx.ID_dessiner et wx.ID_surligner n'existent pas dans le module que tu importe, et tu ne définit de telles variables nul part, d'où espère tu qu'elles proviennent?
as tu copié/collé du code de quelque part?
Hors ligne
#3 Le 18/03/2011, à 14:05
- snowvinc
Re : Besoin d'aide pour application en python
Non j'ai suivit et adapter(surement mal) le tuto vidéo qu'on trouve sur le site du zero
Je pensais que wx comprendrait que c'était des identifiant d'un objet button
Serai-t'il mieux que j'utilise une autre class genre panneau(wx.pannel) pour y placer mes boutons?
Excuse mon ignorance
D'ailleurs si vous avez quelques bon tutos sur python a me conseiller je suis preneur.
Dernière modification par snowvinc (Le 18/03/2011, à 14:27)
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#4 Le 18/03/2011, à 14:57
- snowvinc
Re : Besoin d'aide pour application en python
Bon alors j'ai modifier mon code
import wx
class fenetre(wx.Frame):
def __init__(self, parent, id, titre):
wx.Frame.__init__(self, parent, id, titre, size=(1024, 768))
self.amount = 20
self.SetTransparent(self.amount)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
panneau = wx.Panel(self)
bouton_d = wx.Button(panneau, "dessinner")
def OnCloseWindow(self, evt):
self.Destroy()
class monAppli (wx.App):
def OnInit(self):
frm = fenetre(None, -1, 'transparent')
frm.Show(True)
return True
app = monAppli()
app.MainLoop()
Et il me met toujours une erreur sur bouton_d.
Je comprends pas pourquoi.
Exactement comme panneau je créé une variable contenant l'objet wx.Button a l'interreur du conteneur panneau et je l'appel "dessiner"
Qu'est-ce qui cloche?
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#5 Le 18/03/2011, à 15:14
- sweetly
Re : Besoin d'aide pour application en python
"dessinner", c'est pas la même orthographe que "dessiner".
Hors ligne
#6 Le 18/03/2011, à 16:40
- snowvinc
Re : Besoin d'aide pour application en python
oui mais dans mon programme ca change rien car "dessinner" n'est qu'un label, du texte
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#7 Le 18/03/2011, à 16:48
- snowvinc
Re : Besoin d'aide pour application en python
Bon encore quelques modif.
- Ma fenetre n'est toujours pas transparente
- Mes deux boutons s'affichent et les fonctions test associer fonctionne bien
import wx
class fenetre(wx.Frame):
def __init__(self, parent, id, titre):
#fenetre
wx.Frame.__init__(self, parent, id, titre, size=(1024, 768))
self.SetTransparent(20)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
#panneau dans lequel on va travailler
panneau = wx.Panel(self)
#boutons
panneau.bouton_d = wx.Button(panneau, -1, "Dessiner", (0,45))
panneau.bouton_s = wx.Button(panneau, -2, "Surligner", (100,45))
#evenements des boutons
self.Bind(wx.EVT_BUTTON, self.dessiner, id = panneau.bouton_d.GetId())
self.Bind(wx.EVT_BUTTON, self.surligner, id = panneau.bouton_s.GetId())
def dessiner(self, evt):
print "fff"
def surligner(self, evt):
print "fff"
def OnCloseWindow(self, evt):
self.Destroy()
class monAppli (wx.App):
def OnInit(self):
frm = fenetre(None, -1, 'transparent')
frm.Show(True)
return True
app = monAppli()
app.MainLoop()
Quelqu'un aurais une idée pour la transparence? svp
Dernière modification par snowvinc (Le 18/03/2011, à 18:31)
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#8 Le 18/03/2011, à 21:34
- tshirtman
Re : Besoin d'aide pour application en python
http://wiki.wxpython.org/Transparent%20Frames
On *nix you need to be running an X Server that supports the composite extension, have that extension loaded, and also be running a compositing manager
ton compiz est activé?
sinon je vois pas trop
Hors ligne
#9 Le 19/03/2011, à 12:49
- snowvinc
Re : Besoin d'aide pour application en python
Bon alors voila la transparence fonctionne.
Donc pour avoir une fenêtre transparente en wxpyhton voici le code:
import wx
class fenetre(wx.Frame):
def __init__(self, parent, id, titre):
#fenetre
wx.Frame.__init__(self, parent, id, titre, size=(1024, 768))
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
#panneau dans lequel on va travailler
panneau = wx.Panel(self)
#boutons
panneau.bouton_d = wx.Button(panneau, -1, "Dessiner", (0,45))
panneau.bouton_s = wx.Button(panneau, -2, "Surligner", (100,45))
#evenements des boutons
panneau.Bind(wx.EVT_BUTTON, self.dessiner, id = panneau.bouton_d.GetId())
panneau.Bind(wx.EVT_BUTTON, self.surligner, id = panneau.bouton_s.GetId())
def dessiner(self, evt):
print("fff")
def surligner(self, evt):
print("fff")
def OnCloseWindow(self, evt):
self.Destroy()
class monAppli (wx.App):
def OnInit(self):
frm = fenetre(None, -1, 'transparent')
frm.Show(True)
frm.SetTransparent(20)
return True
app = monAppli()
app.MainLoop()
Je ne ferme pas le topic car j'aurai surement encore besoin d'aide. Car là mes boutons deviennent transparents aussi et je ne le veux pas. Mais je vais d'abord chercher un peu seul
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#10 Le 20/03/2011, à 10:53
- snowvinc
Re : Besoin d'aide pour application en python
Comment puis-je faire pour que mes boutons n'herite pas de la transprence svp?
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#11 Le 20/03/2011, à 11:05
- tshirtman
Re : Besoin d'aide pour application en python
Essaye un "panneau.bouton_d.SetTransparent(0)"
Hors ligne
#12 Le 20/03/2011, à 13:22
- snowvinc
Re : Besoin d'aide pour application en python
Merci il me semble que j'avais déjà essayé. Je vous tiens au courant. Merci. Il faudrait plus mettre 255 non? pour qu'il soit opaque
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#13 Le 20/03/2011, à 16:04
- tshirtman
Re : Besoin d'aide pour application en python
Ah oui, l'un ou l'autre, je n'ai pas vérifié dans la doc si c'était la valeur d'opacité ou de transparence (ce que semblait indiquer le nom).
Hors ligne
#14 Le 20/03/2011, à 18:26
- snowvinc
Re : Besoin d'aide pour application en python
Bon alors du coup je fais deux fenêtres ca sera plus simple.
Dernière modification par snowvinc (Le 20/03/2011, à 19:21)
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#15 Le 21/03/2011, à 00:35
- AnsuzPeorth
Re : Besoin d'aide pour application en python
Bjr,
Je ne sais pas avec qt, mais avec gtk, il faut mettre le background de la fenêtre transparente, sinon, l'opacity, c'est pour l'ensemble.
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#16 Le 23/03/2011, à 12:28
- snowvinc
Re : Besoin d'aide pour application en python
Bonjour bonjour,
Alors j'ai avancé et j'aurai encore besoin d'un peu d'aide svp.
# -*- coding: cp1252 -*-
import wx
class fenetre(wx.Frame):
#fenetre
def __init__(self, parent, id, titre):
wx.Frame.__init__(self, parent, id, titre)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
#panneau dans lequel on va travailler*
self.cnv=wx.Panel(self,-1)
self.pen=wx.Pen("#FF0000",4)
def Dessiner(self):
etiquette = wx.StaticText(self.cnv, 1, "Bonjour!")
self.Bind(wx.EVT_LEFT_DOWN, self.Position)
def Position(self, evt): # La plus importante !
pt = evt.GetPosition() # position tuple
print pt
def OnCloseWindow(self, evt):
self.Destroy()
class fenetreTool(fenetre):
#fenetre
def __init__(self, parent, id, titre):
fenetre.__init__(self, parent, id, titre)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
#panneau dans lequel on va mettre les boutons
panneau = wx.Panel(self, size=(150, 768))
#boutons
bouton_d = wx.Button(panneau, -1, "Dessiner", (10,10))
#bouton_s = wx.Button(panneau, -2, "Surligner", (110,10))
#evenements des boutons
bouton_d.Bind(wx.EVT_BUTTON, self.AppelDessiner)
#bouton_s.Bind(wx.EVT_BUTTON, self.surligner, id = bouton_s.GetId())
def AppelDessiner(self, evt):
self.GetParent().Dessiner()
def OnCloseWindow(self, evt):
self.Destroy()
class monAppli (wx.App):
def OnInit(self):
frm = fenetre(None, -1, 'transparent')
frm.Show(True)
frm.SetTransparent(50)
frmTool = fenetreTool(frm, -2, 'outils')
frmTool.Show(True)
return True
if __name__ == "__main__":
app = monAppli()
app.MainLoop()
Donc quand j'appuie sur le bouton dessiner de la fenetreTool cela m'affiche bien "bonjour!" dans la fenetre donc j'accede bien a l'objet mais l'événement Bind ne fonctionne pas.
Auriez vous une idée?
Peut être faut t'il que je rende la fenetre active avant? je suis en train de chercher la fonction pour mais si vous la connaissez ne vous faites pas prié.
EDIT: c'est bon j'ai réglé le souci en fait EVT_LEFT_DOWN ne peut pas ne faire sur un objet wx.Frame
Dernière modification par snowvinc (Le 23/03/2011, à 19:00)
Caz: un social G33K http://snowvinc.free.fr
Hors ligne
#17 Le 02/06/2011, à 12:48
- snowvinc
Re : Besoin d'aide pour application en python
Bonjour,
Je relance un peu le sujet en esperant que j'arrive a regler mes dernier probleme rapidement.
Alors voilà on m'a demandé de faire un petit projet en python en peu de temps alors que je ne connaissait pas ce langage. J'ai donc commencer python il y a moins d'un mois et j'ai donc encore quelques souci.
En gros j'ai décidé de faire en python un logiciel de type Griboull_i http://pedagogie.ac-toulouse.fr/svt/...rez/gribouill/
Gribouill_i est un logiciel qui permet de "dessiner sur son ecran" pour cela il prends un screenshot de l'écran avant de dessiner dessus.
Moi je préfère le faire avec une fenêtre transparente sur laquelle je dessinerai
J'ai donc opter pour wxPython car c'est la première GUI avec laquelle j'ai réussi a obtenir une fenêtre transparente.
Je bloque à deux endroit pour le moment.
- Je n'ai pas trouver comment mes objet dessiné sur une fenêtre transparente ne soit pas eux même transparent.(Par exemple le masque (def drawMask) bien qu'il soit en opaque il hérite de la transparence de son conteneur: window(wx.frame))
- Ni comment garder les dessins effectués
Alors voici mon code
# -*- coding: cp1252 -*-
#/usr/bin/env
import wx
class window(wx.Frame):
#window
def __init__(self, parent, id, titre):
wx.Frame.__init__(self, parent, id, titre)
#taille de la fenetre/width of this window
a = wx.GetDisplaySize()
b = str(a)
b = b.replace('(','')
b = b.replace(')','')
b = b.replace(' ','')
self.windowWidth = int(b.split(',')[0])
self.windowHeight = int(b.split(',')[1])
a = self.windowWidth
self.windowWidth2 = int(a/2.2)
self.SetSize(wx.Size(self.windowWidth2,self.windowHeight))
#panel
self.cnv=wx.Panel(self,-1)
print "panel create"
#creation of Client DC
self.dc=wx.ClientDC(self.cnv)
print "clientDC create"
def OnCloseWindow(self, evt):
self.Destroy()
class windowTool(window):
#windowTool inheriting class window () / h�ritant de la classe window()
def __init__(self, parent, id, titre):
window.__init__(self, parent, id, titre)
#taille de la fenetre/width of this window
height = self.GetParent().windowHeight
#debut lignes a commenter dans le cas d'un seul ecran
a = self.GetParent().windowWidth2
b = self.GetParent().windowWidth - 1920 #cela m'est utile pour le dualscreen /
width = int(b-a)
self.SetSize(wx.Size(width, height))
#fin ligne a commenter dans le cas d'un seul ecran
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
#panel dans lequel on va mettre les boutons / panel in which we will put the buttons
panel = wx.Panel(self, size=(170, height))
#boutons / buttuns
button_drawLine = wx.Button(panel, -1, "Tracer ligne", (10,10))
button_drawRectangle = wx.Button(panel, -2, "Placer masque", (10,50))
button_highlight = wx.Button(panel, -3, "Surligner", (10,90))
button_close = wx.Button(panel, -4, "Fermer Application", (10,130))
#evenements / Events
self.Bind(wx.EVT_BUTTON, self.EventPosition, button_drawLine)
self.Bind(wx.EVT_BUTTON, self.EventPosition, button_highlight)
self.Bind(wx.EVT_BUTTON, self.EventPosition, button_drawRectangle)
self.Bind(wx.EVT_BUTTON, self.GetParent().OnCloseWindow, button_close)
def OnCloseWindow(self, evt):
self.Destroy()
def EventPosition(self, evt):
self.btn = evt.GetEventObject()
print "event position"
#Focus sur la fenetre transparente et d�tection des mouvements de la souris
#Focus on the transparent window and detection of mouse movements
self.GetParent().Raise()
self.GetParent().cnv.Bind(wx.EVT_LEFT_DOWN, self.EventMotion)
def EventMotion(self, evt):
print "event motion"
#sauvegarde de la position du clique / #save the position of clicks
self.posx = evt.GetX()
self.posy = evt.GetY()
self.GetParent().Refresh ()
self.GetParent().cnv.Bind(wx.EVT_MOTION, self.Position)
def Position(self, evt):
#if mouse leftbutton is down
if wx.GetMouseState().LeftDown():
print "position"
#Assignation de la position du curseur/ #Detection, arrest and send the cursor position
self.posx2 = evt.GetX()
self.posy2 = evt.GetY()
self.GetParent().Refresh ()
self.GetParent().cnv.Bind(wx.EVT_PAINT, self.Paint)
def Paint(self, evt):
print "Paint"
#creation de la toile / creation of the painting canvas
self.GetParent().dc = wx.PaintDC(self.GetParent().cnv)
if self.btn.GetLabelText()=="Tracer ligne":
self.drawLine(self.dc)
if self.btn.GetLabelText()=="Placer masque":
self.drawMask(self.dc)
if self.btn.GetLabelText()=="Surligner":
self.highlight(self.dc)
def drawLine(self, dc):
print "i drawing line"
self.GetParent().dc.SetPen(wx.Pen('black', 2))
#self.GetParent().dc.SetBrush(wx.Brush(wx.Color(0, 0, 0), wx.ALPHA_OPAQUE))
self.GetParent().dc.DrawLine(self.posx2, self.posy2,self.posx,self.posy)
def drawMask(self, dc):
print "i drawing mask"
#self.GetParent().dc.SetPen(wx.Pen('red', 2))
# le alpha_opaque n'a pas l'air d'etre pris en compte. Le masque devrait cacher ce qu'il y a en dessous
#the alpha_opaque did not seem to be taken into account. The mask should hide what he was below
self.GetParent().dc.SetBrush(wx.Brush(wx.Color(0, 0, 0), wx.ALPHA_OPAQUE))
self.GetParent().dc.DrawRectangle(self.posx, self.posy, self.posx2 - self.posx, self.posy2- self.posy)
def highlight (self, dc):
print "i drawing highlight"
self.GetParent().dc.SetBrush(wx.Brush(wx.Color(150, 250, 150)))
self.GetParent().dc.DrawRectangle(self.posx, self.posy, self.posx2 - self.posx, self.posy2 - self.posy)
class monApp (wx.App):
def OnInit(self):
frm = window(None, -1, 'transparent')
frm.Show(True)
# pour l'instant j'utilise une semi transparence sinon je ne vois pas les dessins.
#for now I use a semi transparent or I do not see the drawings.
frm.SetTransparent(155)
frmTool = windowTool(frm, -2, 'outil')
frmTool.Show(True)
return True
if __name__ == "__main__":
app = monApp()
app.MainLoop()
Merci pour toutes aide.
Caz: un social G33K http://snowvinc.free.fr
Hors ligne