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 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
code geany

- 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 sad

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 sad
- Mes deux boutons s'affichent et les fonctions test associer fonctionne bien smile

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

#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