Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] PyQt button with an image on it
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] PyQt button with an image on it

Scheduled Pinned Locked Moved General and Desktop
17 Posts 2 Posters 33.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    swilliams2
    wrote on last edited by
    #7

    It's still highlighting the "self" in red, which is really weird, because it wasn't before :S

    1 Reply Last reply
    0
    • jazzycamelJ Offline
      jazzycamelJ Offline
      jazzycamel
      wrote on last edited by
      #8

      Missing bracket:
      @
      self.button.setIconSize(QtCore.QSize(24,24))
      @

      For the avoidance of doubt:

      1. All my code samples (C++ or Python) are tested before posting
      2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
      1 Reply Last reply
      0
      • S Offline
        S Offline
        swilliams2
        wrote on last edited by
        #9

        And if I take out
        [code] self.button.clicked.connect(self.handleButton) [/code]
        it says that layout in the line below it is invalid syntax :S

        1 Reply Last reply
        0
        • S Offline
          S Offline
          swilliams2
          wrote on last edited by
          #10

          Ahhh c:
          Now I'm getting a new error when I run it:
          [code]
          Traceback (most recent call last):
          File "C:\Itllworkthistime\email button.py", line 32, in <module>
          window = Window()
          File "C:\Itllworkthistime\email button.py", line 10, in init
          self.button.setIcon(QtGui.QIcon("c:/Itllworkthistime/z.jpeg"))
          AttributeError: 'Window' object has no attribute 'button'
          [/code]

          1 Reply Last reply
          0
          • jazzycamelJ Offline
            jazzycamelJ Offline
            jazzycamel
            wrote on last edited by
            #11

            We're making quite heavy weather of this! The following works fine on my system (with a different image file obviously):

            @
            from PyQt4 import QtGui, QtCore

            import smtplib

            from email.mime.text import MIMEText

            class Window(QtGui.QWidget):
            def init(self):
            QtGui.QWidget.init(self)
            self.button = QtGui.QPushButton('', self)
            self.button.clicked.connect(self.handleButton)
            self.button.setIcon(QtGui.QIcon("c:/Itllworkthistime/z.jpeg"))
            self.button.setIconSize(QtCore.QSize(24,24))
            layout = QtGui.QVBoxLayout(self)
            layout.addWidget(self.button)

            def handleButton(self):
                fp = open('Firetruck.txt', 'r')
                msg = MIMEText(fp.read())
                fp.close()
            
                msg['Subject'] = 'Subject'
                msg['From'] = 'ajames@brecon-hs.powys.sch.uk'
                msg['To'] = 'swilliams@brecon-hs.powys.sch.uk'
            
                s = smtplib.SMTP('BHS-MAIL')
                s.send_message(msg)
            

            if name == 'main':

            import sys
            app = QtGui.QApplication(sys.argv)
            window = Window()
            window.show()
            sys.exit(app.exec_())
            

            @

            For the avoidance of doubt:

            1. All my code samples (C++ or Python) are tested before posting
            2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
            1 Reply Last reply
            0
            • S Offline
              S Offline
              swilliams2
              wrote on last edited by
              #12

              Ah :L
              I accidentally deleted the line
              [code]
              self.button = QtGui.QPushButton('', self)
              [/code]
              It's working now, but the image isn't there :c

              1 Reply Last reply
              0
              • jazzycamelJ Offline
                jazzycamelJ Offline
                jazzycamel
                wrote on last edited by
                #13

                Check the name of and the path to the image is correct. If its in the same folder as your python script just use a relative path:

                @
                ...
                self.button.setIcon(QtGui.QIcon("./z.jpeg"))
                ...
                @

                For the avoidance of doubt:

                1. All my code samples (C++ or Python) are tested before posting
                2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  swilliams2
                  wrote on last edited by
                  #14

                  It was a .jpg rather than a .jpeg apparently =]
                  Thank you so much ^_^

                  If you can help me some more though I'd appreciate it because I've just been told to add a sound for when the button gets clicked, how do I do that? =]
                  And I've got this extended version of the email script that I half pinched from a tutorial and half wrote myself that sends a gif with html, but I can't seem to get it working:

                  [code]
                  import smtplib
                  from email.mime.multipart import MIMEMultipart
                  from email.mime.text import MIMEText
                  from email.mime.image import MIMEImage

                  me = "swilliams@brecon-hs.powys.sch.uk"
                  you = "ajames@brecobn-hs.powys.sch.uk"

                  msg = MIMEMultipart('related')
                  msg['Subject'] = 'Test Message'
                  msg['From'] = me
                  msg['To'] = you
                  msg.preamble = 'This is a super cool multipart message using html and python c:'

                  msgAlt = MIMEMultipart('alternative')
                  msg.attach(msgAlt)

                  msgTxt = MIMEText('You see this if it fails')
                  msgAlt.attach(msgTxt)

                  thehtmlcode = """
                  <html>
                  <head>Test Header</head>
                  <body>
                  <p>This isn't plain text!<br>
                  If you're seeing this everything should be working as planned :D<br>
                  Here's the gif <a href="http://tinypic.com?ref=2wpnfnt" target="_blank"><img src="http://i43.tinypic.com/2wpnfnt.gif" border="0" alt="Image and video hosting by TinyPic"></a>
                  </p>
                  </body>
                  </html>
                  """
                  msgTxt = MIMEText(thehtmlcode, msgAlt.attach(msgTxt))

                  fp = open('coffee.gif', 'r')
                  msgImg = MIMEImage(fp.read())
                  fp.close()

                  msgImg.add_header('EMEGRENCY thing', '<Itsapicture>')
                  msg.attach(msgImg)

                  smtp = smtplib.SMTP('BHS-MAIL')
                  s.send_message(msg)
                  [/code]

                  When I run it I get this error message

                  [code]
                  Traceback (most recent call last):
                  File "C:\Users\ACERREVO\Desktop\New folder\Awesomegifworksscript.py", line 36, in <module>
                  msgImg = MIMEImage(fp.read()) #something's wrong here.
                  File "C:\Python33\lib\encodings\cp1252.py", line 23, in decode
                  return codecs.charmap_decode(input,self.errors,decoding_table)[0]
                  UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 206: character maps to <undefined>
                  [/code]

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    swilliams2
                    wrote on last edited by
                    #15

                    The "#something's wrong here." in the error message I put in then took out to post, because I wanted to remind myself that it was the line referred to in the error message =]

                    1 Reply Last reply
                    0
                    • jazzycamelJ Offline
                      jazzycamelJ Offline
                      jazzycamel
                      wrote on last edited by
                      #16

                      The following example plays a sound when the button is pressed:

                      @
                      from PyQt4.QtCore import *
                      from PyQt4.QtGui import *
                      from PyQt4.phonon import Phonon

                      class Widget(QWidget):
                      def init(self, parent=None, **kwargs):
                      QWidget.init(self, parent, **kwargs)

                          l=QVBoxLayout(self)
                          l.addWidget(QPushButton("Play", self, clicked=self.play))
                      
                      def play(self):
                          self.output=Phonon.AudioOutput(Phonon.MusicCategory)
                          self.media=Phonon.MediaObject()
                          Phonon.createPath(self.media, self.output)
                          self.media.setCurrentSource(Phonon.MediaSource('./sound_file.wav'))
                          self.media.play()
                      

                      if name=="main":
                      from sys import argv, exit

                      a=QApplication(argv)
                      w=Widget()
                      w.show()
                      w.raise_()
                      exit(a.exec_())
                      

                      @

                      You'll need the Phonon module installed for this to work (and provide your own sound file ;o).

                      For your other problem, try the following for line 34:

                      @
                      fp = open('coffee.gif', 'rb')
                      @

                      This opens the file in binary rather than ASCII mode.

                      Also, if your original problem is solved, please insert [SOLVED] into the threads title to mark it as such.

                      For the avoidance of doubt:

                      1. All my code samples (C++ or Python) are tested before posting
                      2. As of 23/03/20, my Python code is formatted to PEP-8 standards using black from the PSF (https://github.com/psf/black)
                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        swilliams2
                        wrote on last edited by
                        #17

                        I've changed that, it's working now :D
                        Only it's sending the plain text alternative instead of the html =/

                        And thank you for the sound script, I'll have a play around with it now :D
                        Where would I get Phonon from though? =]

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved