Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser une méthode PyQt avec wxPython ?

Sujet résolu
    26 novembre 2010 à 12:55:51

    Bonjour!

    Voilà j'ai créé un petit programme qui permet de prendre un screenshot de l'écran, l'uploader sur imageshack.us, et renvoyer le lien à l'utilisateur.

    Malheureusement, l'utilisation de PyQt4 & wxPython dans la même appli c'est trop lourd, surtout que le programme fait 2 boutons ~.

    Mon code :
    #!/usr/bin/python
    
    import os
    import wx
    import sys
    
    from PyQt4.QtGui import QPixmap, QApplication
    
    TEMP_FILENAME = "temp.data"
    SCRN_FILENAME = "temp.png"
    SCRN_FORMAT   = "png"
    	
    class MyFrame(wx.Frame):
    	def __init__(self):
    		wx.Frame.__init__(self, None, wx.ID_ANY, 'Easy screenshot uploader - by FMIS@Menace.', size=(390, 100))
    		
    		self.panel = wx.Panel(self, wx.ID_ANY)
    		self.button = wx.Button(self.panel, wx.ID_ANY, "Take Screenshot", size=(350, -1))
    		self.button.Bind(wx.EVT_BUTTON, self.onTakeScreenshot)
    		self.urlText = wx.TextCtrl(self.panel, wx.ID_ANY, '...', style=wx.TE_READONLY, size=(350, -1))
     
    		self.sizer = wx.BoxSizer(wx.VERTICAL)
    		self.sizer.Add(self.button, 0, wx.ALIGN_CENTER | wx.ALL, 3)
    		self.sizer.Add(self.urlText, 0, wx.ALIGN_CENTER | wx.ALL, 3)
    		self.panel.SetSizer(self.sizer)
    		
    	def onTakeScreenshot(self, event):
    		self.Show(False)
    		def takeScreenshot():
    			app = QApplication(sys.argv)
    			QPixmap.grabWindow(QApplication.desktop().winId()).save(SCRN_FILENAME, SCRN_FORMAT)
    			return os.getcwd() + os.sep + SCRN_FILENAME
    		filepath = takeScreenshot()
    		os.system("curl -H Expect: -F fileupload=\"@" + filepath + "\" -F xml=yes -# \"http://www.imageshack.us/index.php\" > " + TEMP_FILENAME)
    		with open(TEMP_FILENAME, "r") as file:
    			content = file.read()
    		start = content.find("<image_link>")
    		end = content.find("</image_link>")
    		link = content[start+12:end]
    		os.remove(TEMP_FILENAME)
    		os.remove(filepath)
    		self.urlText.SetLabel(link)
    		self.Show(True)
    
    myApp = wx.App(False)
    myFrame = MyFrame()
    myFrame.Show()
    myApp.MainLoop()
    


    La méthode à passer en wxPython (elle permet de prendre un screenshot de l'écran et le sauvegarder sur le DD):
    def takeScreenshot():
    	app = QApplication(sys.argv)
    	QPixmap.grabWindow(QApplication.desktop().winId()).save(SCRN_FILENAME, SCRN_FORMAT)
    	return os.getcwd() + os.sep + SCRN_FILENAME
    


    En espérant qu'on puisse m'aider, merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2010 à 14:06:34

      Bonjour,

      C'est possible avec wxPython, en utilisant wx.ScreenDC():

      def getScreenshot(self):
              context = wx.ScreenDC()
              memory = wx.MemoryDC( )
              x, y = wx.DisplaySize()
              bitmap = wx.EmptyBitmap(x, y)
              memory.SelectObject(bitmap)
              memory.Blit(0, 0, x, y, context, 0, 0)
              memory.SelectObject(wx.NullBitmap)
              return bitmap
      
      • Partager sur Facebook
      • Partager sur Twitter
        26 novembre 2010 à 14:10:00

        Ok merci. Comment je sauve ça dans un fichier par exemple?

        EDIT : J'ai trouvé, merci à toi.
        • Partager sur Facebook
        • Partager sur Twitter

        Utiliser une méthode PyQt avec wxPython ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown