IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Probleme import gtk


Sujet :

Python

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Par défaut Probleme import gtk
    Bonjour à tous,

    Pour la petite histoire:
    je suis en train de programmer un Bot pour megaupload, qui permet de gérer une liste de téléchargement.
    le bot en lui même fonctionne, pour les intéressés: http://botmu.sourceforge.net
    Topic Ubuntu-fr.org: http://forum.ubuntu-fr.org/viewtopic.php?id=449708


    Mon problème:
    Je suis en train d'implémenter une fonction de repérage de copier/coller pour intégrer automatiquement un lien qu'on aurait copié, via, par exemple, firefox
    j'ai fais un test sur lequel ça marchait très bien, mais lorsque j'intègre ma class a mon projet j'ai une erreur à cause de "import gtk":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py:127: RuntimeWarning: PyOS_InputHook is not available for interactive use of PyGTK
      set_interactive(1)
    quelqu'un sait d'où ça pourrait venir ?
    * ça viendrai pas du fait que pyqt et pygtk sont pas copain ? pasque je vois pas ce qui peu déconner ^^
    j'ai vu qu'il y avait une autre methode pour lire le clipboard, je vais regarder ça en attendant.
    EDIT: ah bah non, j'ai trouver un autre moyen mais ça passe par la ligne de commande sur un programme non installé par defaut, Si quelqu'un à une autre solution pour récupéré la valleur du clipboard sans passé par gtk, ça me va aussi


    ma class clipboard:
    * j'ai également tenter de rajouter "import pygtk pygtk.require('2.0')" mais ça ne change rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import threading
    import time
     
    try:
        import gtk
    except:
        pass
     
    try:
        import win32clipboard
        import win32con
    except:
        pass
     
     
    class WinClipboard(threading.Thread):
        def __init__(self, args=None, kwargs=None):
     
            threading.Thread.__init__(self)
     
            self.stop = False
            self.clipboardValue=""
     
     
        def run(self):
            while not self.stop:
                clipboard = win32clipboard.OpenClipboard() 
                tmp = win32clipboard.GetClipboardData(win32con.CF_TEXT)
                if(tmp != self.clipboardValue):
                    self.clipboardValue = tmp
                    if("http://megaupload.com?d=" in self.clipboardValue):
                        print self.clipboardValue
                time.sleep(2)
     
     
    class LinuxClipboard(threading.Thread):
        def __init__(self, args=None, kwargs=None):
     
            threading.Thread.__init__(self)
     
            self.stop = False
            self.clipboardValue=""
     
     
        def run(self):
            while not self.stop:
                clipboard = gtk.clipboard_get()
                tmp = clipboard.wait_for_text()
                if(tmp != self.clipboardValue):
                    self.clipboardValue = tmp
                    if("http://megaupload.com?d=" in self.clipboardValue):
                        print self.clipboardValue
                time.sleep(2)
    mon test, qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from clipboard import *
     
    class test():
        def __init__(self):
            t = LinuxClipboard(self)
     
            t.start()
     
    test()
    ma class (le debut (seulement __init__) dans laquel ça plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    # Inclusions des modules générique
    # Native
    import os, platform
    import re
    import time
    # Pyqt4
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    # Perso
    from download import *
    from options import *
    from clipboard import *
     
    # Inclusion optionel en fonction de la plateforme
    try:
        import _winreg
    except:
        pass
     
    #############################################################################
    class Fenetre(QWidget):
        #========================================================================
        def __init__(self, parent=None):
     
            if not os.path.isfile("setup.ini"):
                paramfile = open("setup.ini", "w+")
                paramfile.close()
     
            #About values
            self.aboutLogo = 'icons/BotMU.png'
            self.aboutAuthor = u'Raphaël Perraudeau'
            self.aboutAlias = u'xXKirastarotHXx'
            self.aboutMail = 'rperraudeau@gmail.com'
            self.aboutVersion = 'v0.97b'
            self.aboutDescription = u'BotMU est un petit logiciel qui permet de lancer une liste de téléchargements via megaupload'
            self.aboutWebSite = 'http://botmu.sourceforge.net/'
     
            # Definition des variables d'environement en fonction de l'os
            # Linux:
            if platform.system() == 'Linux':
                self.userPersonalPath = os.path.expanduser("~")
                #self.clipboard = LinuxClipboard(self)
     
                #self.clipboard.start()
     
            # Windows:
            # Fonctionne avec XP, à tester avec Vista/Seven
            if platform.system() == 'Windows':
                key = _winreg.OpenKey( _winreg.HKEY_CURRENT_USER, 'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders',0, _winreg.KEY_READ)
                (valeur,typevaleur) = _winreg.QueryValueEx(key,'Personal')
                _winreg.CloseKey(key)
                self.userPersonalPath = valeur
                #self.clipboard = WinClipboard(self)
     
                #self.clipboard.start()
    Voila voila,
    merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Par défaut
    Bonsoir,

    J'ai trouvé ceci sur google, si cela peut vous aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def test():
        OpenClipboard() 
        d=GetClipboardData(win32con.CF_TEXT) # get clipboard data
        SetClipboardData(win32con.CF_TEXT, "Hello") # set clipboard data
        CloseClipboard()
     
    if __name__ == '__main__':
        if sys.platform == 'win32':
            from win32clipboard import *
            import win32gui, win32con
            test()
    Source : http://stackoverflow.com/questions/3...h-python-win32

    En tout cas, moi qui utilise que pygtk, j'ai trouvé sa intéressent (vous pourriez faire votre interface en pyGTK sans passer par Qt)

    Mickael

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Par défaut
    Merci pour la réponse,

    j'utilise déjà win32clipboard dans ma class WinClipboard, si la plateforme d'utilisation est windows, le problème se pause lorsque l'on utilise le programme sous linux, puisqu'il ne peut pas passer par win32clipboard.

    j'ai donc pour le moment utilisé gtk mais l'import de la librairie fait tout planter.

    il m'a sembler voir que pyqt pouvais faire quelque chose de similaire mais je n'ai pas encore eu le temps de tester.

    vous pourriez faire votre interface en pyGTK sans passer par Qt
    oui, mais bon j'ai déjà appris a utilisé tinker, wx et la pyqt, donc je vois pas trop l'interet de me pencher sur un autre ^^
    de plus que l'interface de mon prog est déjà complexe donc je vais pas m'amuser a tout refaire ^^
    mais j'y jeterai surement un coup d'oeil lors d'un prochain dev

    merci quand même

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Par défaut
    Bonjour,

    J'ai cherché un peu avec pyQt, ne l'aillant pas chez moi, je n'ai aps pu tester, voici ce que j'ai pu dénicher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    clipboard = QtGui.QApplication.clipboard()
    xml_data = unicode(clipboard.text())
    La source : http://nullege.com/codes/search/PyQt...tion.clipboard

    En esperant que cela vous aide...

    Mickael

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Par défaut
    c'est bon merci pour les pistes, j'ai réussis a trouver ce que je voulais.

    pour ceux que ça interesserait:

    ma class principale, avec les events:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    # Inclusions des modules générique
    # Native
    import sys
    # Pyqt4
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    # Perso
    from fenetre import *
     
     
     
    #############################################################################
    class MainWindow(QMainWindow):
    	def __init__(self, app):
    		QMainWindow.__init__(self)
     
    		self.resize(350, 250)
     
    		fen = Fenetre()
    		self.setCentralWidget(fen)
     
     
    		#CLIPBOARD
    		fen.clipboard = app.clipboard() 
    		fen.clipboardValue = ""
    		fen.clipboardLastValue = ""
    		fen.clipboard.setText(fen.clipboardValue, QClipboard.Clipboard)
    		app.connect(fen.clipboard, SIGNAL("dataChanged()"), fen.clipboardChanged)
     
     
    #############################################################################
    if __name__ == "__main__":
    	app = QApplication(sys.argv)
    	fen = MainWindow(app)
    	fen.setWindowTitle("Windows Title")
    	fen.show()
    	sys.exit(app.exec_())
    ma class Fenetre Qwidget, avec ma class clipboard:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    # Pyqt4
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
     
     
    # Inclusion optionel en fonction de la plateforme
    try:
    	import _winreg
    except:
    	pass
     
    #############################################################################
    class Fenetre(QWidget):
    	#========================================================================
    	def __init__(self, parent=None):
     
    		[...]
    		#ma fenetre princiaple
     
     
    	def clipboardChanged(self):
    		tmpError = False
    		newLinkFound = []
    		try:
    			test = chardet.detect(self.clipboard.text())
    			tmp = self.clipboard.text("plain", QClipboard.Selection)
    		except:
    			try:
    				tmp = unicode(self.clipboard.text(), "ISO-8859-15")
    			except:
    				tmp = ""
    				tmpError = True
    		if not tmpError:
    			self.clipboardValue = tmp
    merci bien
    et sry pour les fautes ^^

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Par défaut
    heuu enfait il me reste un problème:
    lors de la fermeture du programme, le clipboard tourne toujours, et au bout de quelques seconde, me donnne une erreure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QClipboard: Unable to receive an event from the clipboard manager in a reasonable time
    surement à cause de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.connect(fen.clipboard, SIGNAL("dataChanged()"), fen.clipboardChanged)
    Comment je peux fermer correctement tout ça ? :/


    Edit, en testant 50 différente solution j'ai fini par trouver:

    clipboard.deleteLater()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme import fichier javascript
    Par snoozer dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/08/2006, 11h59
  2. probleme importation données
    Par minirom dans le forum Administration
    Réponses: 2
    Dernier message: 24/07/2006, 13h33
  3. plusieurs problemes importants
    Par arti2004 dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2006, 14h08
  4. [GTK]problème avec GTK+ sur DEV-C++
    Par afrikha dans le forum Dev-C++
    Réponses: 7
    Dernier message: 01/10/2005, 14h13
  5. [Classpath] probleme import de librairies
    Par logica dans le forum Général Java
    Réponses: 17
    Dernier message: 05/08/2005, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo