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.6k 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.
  • 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