Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Changing the QLabel frameshape
Forum Updated to NodeBB v4.3 + New Features

Changing the QLabel frameshape

Scheduled Pinned Locked Moved Unsolved Qt for Python
42 Posts 4 Posters 11.1k Views
  • 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 Stevolution

    I get an error with that line

    NameError: name 'QtWidgets' is not defined

    Whats the difference between QtWidgets and QWidget?

    import sys                                                          # This imports the modules	
    import time
    
    from PyQt5.QtWidgets import QApplication, QWidget                   # PyQy5 is the GUI module.   QApplication is part of that module, and QWidget is the Windows interaction class (Keyboard, mouse etc)
    from PyQt5.QtGui import QIcon, QPixmap, QImage                      # QImage is a class of PyQt5 that allows image interaction
    from PyQt5.uic import loadUi
    
    
    import opr                                                          # Face tracking Python routine
    import comm_ard                                                     # Python routine to handle the serial communications to the Arduino
    import random                                                       # Random generator 
    import pickle                                                       # Allows you to send data between Python scripts using a byte data stream
    
    import cv2                                                          # Stands for COMPUTER VISION. Allows the code to take information from a visual source
    
    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by JonB
    #13

    @Stevolution said in Changing the QLabel frameshape:

    I get an error with that line
    NameError: name 'QtWidgets' is not defined

    Show me the line you typed, copied & pasted! Since I use from PyQt5 import QtWidgets all the time...

    In the way you now show, it is using my "second approach". You have

    from PyQt5.QtWidgets import QApplication, QWidget
    

    so to add references to, say QLabel & QFrame you can either modify to:

    from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QFrame
    

    or add a brand new line

    from PyQt5.QtWidgets import QLabel, QFrame
    

    Don't forget to read what I wrote earlier about when you use this method,

    label.setFrameShape(QtWidgets.QFrame.NoFrame)
    

    becomes

    label.setFrameShape(QFrame.NoFrame)
    

    Whats the difference between QtWidgets and QWidget?

    PyQt5.QtWidgets is a module (like a namespace if you're familiar with that term). That module contains many classes. QWidget is a class in the module QtWidgets. That module contains other additional widget-y classes, such as QFrame.

    S 1 Reply Last reply
    1
    • JonBJ JonB

      @Stevolution said in Changing the QLabel frameshape:

      I get an error with that line
      NameError: name 'QtWidgets' is not defined

      Show me the line you typed, copied & pasted! Since I use from PyQt5 import QtWidgets all the time...

      In the way you now show, it is using my "second approach". You have

      from PyQt5.QtWidgets import QApplication, QWidget
      

      so to add references to, say QLabel & QFrame you can either modify to:

      from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QFrame
      

      or add a brand new line

      from PyQt5.QtWidgets import QLabel, QFrame
      

      Don't forget to read what I wrote earlier about when you use this method,

      label.setFrameShape(QtWidgets.QFrame.NoFrame)
      

      becomes

      label.setFrameShape(QFrame.NoFrame)
      

      Whats the difference between QtWidgets and QWidget?

      PyQt5.QtWidgets is a module (like a namespace if you're familiar with that term). That module contains many classes. QWidget is a class in the module QtWidgets. That module contains other additional widget-y classes, such as QFrame.

      S Offline
      S Offline
      Stevolution
      wrote on last edited by
      #14

      @JonB said in Changing the QLabel frameshape:

      PyQt5.QtWidgets import QApplication, QWidget, QLabel, QFrame

      PyQt5.QtWidgets import QApplication, QWidget, QLabel, QFrame has fixed the issue.
      I didn't realise I needed to add those to the declared list.

      Thank you very much for your time and patience

      JonBJ 1 Reply Last reply
      0
      • S Stevolution

        @JonB said in Changing the QLabel frameshape:

        PyQt5.QtWidgets import QApplication, QWidget, QLabel, QFrame

        PyQt5.QtWidgets import QApplication, QWidget, QLabel, QFrame has fixed the issue.
        I didn't realise I needed to add those to the declared list.

        Thank you very much for your time and patience

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #15

        @Stevolution
        As I wrote earlier, if you go for the from PyQt5.QtWidgets import Q... route, which is fine, you must now add to that list each time you want to access a specific class, like QWidget or QFrame or QPushButton, and then you can address those by their plain class name, QWidget or QFrame, instead of QtWidgets.QWidget, QtWidgets.QFrame etc.

        You may also shortcut having to spell out each class name by going

        from PyQt5.QtWidgets import *
        

        This imports as QWidget, QFrame, QPushButton and everything else (non-underscore) in the QtWidgets module, in one go. However, this is usually regarded as poor Python practice [https://docs.python.org/3/tutorial/modules.html].

        1 Reply Last reply
        1
        • S Offline
          S Offline
          Stevolution
          wrote on last edited by
          #16

          Yes. Many thanks for your excellent assistance

          1 Reply Last reply
          0
          • S Offline
            S Offline
            Stevolution
            wrote on last edited by
            #17

            Without appearing to be totally thick... it's frustrating that I have sorted out all the comms to the Arduino, camera importing etc...

            but cannot get my head around this formatting to change text properties.

            How would I change the font size of a label? All my efforts have failed.
            I had to import the class QFrame to change the frame, but QFont gives a syntax

            This is clearly wrong...

            self.COMConnectLabel.setFontSize(14);

            1 Reply Last reply
            0
            • S Offline
              S Offline
              Stevolution
              wrote on last edited by
              #18

              I think I need to walk away for a while. Made great progress today....

              But still can't change that text font size!

              S 1 Reply Last reply
              0
              • S Stevolution

                I think I need to walk away for a while. Made great progress today....

                But still can't change that text font size!

                S Offline
                S Offline
                Stevolution
                wrote on last edited by
                #19

                @Stevolution Thank you Denni. I will have another look at that in a while.

                Just trying to work out why my routine is throwing up an exception when I transfer 6 bytes of data from my Arduino to my Python process.

                I can print all six bytes correctly in the decoding routine (called Comm_ard.py), but when I use bytes 5 or 6 in the Python code, it throws up an exception error. Hmm

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  Stevolution
                  wrote on last edited by Stevolution
                  #20

                  OK. Fixed the exception issue.

                  NOTHING I try will let me change the font size. Spent so much time on this. You suggestions Denni didin't work.
                  It's clearly me, but no idea what I am doing wrong. Declared QFont at the start etc.

                  It's maddening how something so stupid takes so long

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    Stevolution
                    wrote on last edited by
                    #21

                    @Denni-0

                    Yes, but I need to implement it in my code. That is a lot of code just to change a font size! Thank you Denni... I do appreciate it.

                    I don't really understand why it's so complicated. Why can you not just say: self.COMConnectLabel.setFontSize(14);

                    Anyway, I will sort it out

                    JonBJ 1 Reply Last reply
                    0
                    • S Stevolution

                      @Denni-0

                      Yes, but I need to implement it in my code. That is a lot of code just to change a font size! Thank you Denni... I do appreciate it.

                      I don't really understand why it's so complicated. Why can you not just say: self.COMConnectLabel.setFontSize(14);

                      Anyway, I will sort it out

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by JonB
                      #22

                      @Stevolution

                      That is a lot of code just to change a font size!
                      I don't really understand why it's so complicated. Why can you not just say: self.COMConnectLabel.setFontSize(14);

                      You only need the lines @Denni-0 gave you earlier:

                      MyFont = QFont()
                      MyFont.setPointSize(14)
                      
                      MyLabel = QLabel()
                      MyLabel.setFont(MyFont)
                      

                      That's 3 lines to change the label's font. That's just what calls Qt has provided. If you wanted to be able to go self.COMConnectLabel.setFontSize(14) you could subclass your labels to add setFontSize(size) as an available method.

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        Stevolution
                        wrote on last edited by
                        #23

                        S0..

                                MyFont = QFont()
                                MyFont.setPointSize(18)
                        
                                self.COMConnectLabel = QLabel()
                                self.COMConnectLabel.setFont(MyFont)
                        

                        This freezes my routine

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          Stevolution
                          wrote on last edited by
                          #24

                          Ha ... thanks Denni
                          Yes, using QT Designer. Got nearly everything working except this and a ProgressBar that keeps throwing up an exception.

                          I will see if I can make a smaller bit of code and either get it working, or post it for your advice.
                          Thanks

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            Stevolution
                            wrote on last edited by
                            #25

                            Thanks Denni, that is a very kind offer.

                            The reason I started with QT Designer, is I started with a project that someone else designed using QT Designer, and I have adapted it to my needs.
                            I don't know Python. I have come from Arduino programming and its pretty different.

                            I have reverse engineered the code, and made far more progress than I thought I would have in a few days.

                            I have some fundamental issue somewhere. I have links to the labels, tick boxes, buttons etc all working fine.

                            But, I just cannot get the font size to change or the ProgressBar to work.

                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              Stevolution
                              wrote on last edited by
                              #26

                              GOT IT

                                      font = self.COMConnectLabel.font()                                                         
                                      font.setPointSize(14)
                                      self.COMConnectLabel.setFont(font)
                              

                              This worked. Trial and error.

                              Now it I need to fix the progress bar

                              1 Reply Last reply
                              1
                              • S Offline
                                S Offline
                                Stevolution
                                wrote on last edited by Stevolution
                                #27

                                Right, the problem with the progressbar is the co-ords.

                                In QT Designer, it shows 480,60 20x191 as the co-ords for the Progressbar

                                But i declare:

                                    self.Temp_bar = QProgressBar(self)
                                    self.Temp_bar.setGeometry(480, 60, 20 , 191)
                                    self.Temp_bar.setValue(350)
                                

                                and the Progress bar is way off the screen (so it was working - just not visible).

                                The actual co-ords to get it anywhere near the position in QT Designer are (502, 820, 50 , 191) And they are not exact.
                                Also, its going from top to bottom instead of as stated in QT Designer, and it's the wrong colour.

                                So... have I made my own progress bar that has nothing to do with the design I made in QT Designer, or and I missing something that links them together? Hmm

                                Edit/update.

                                OK, its all incorrect. From what I understand, for some reason... all the settings in QT Designer are lost.
                                I would need to set up a new style sheet to reproduce the one I made in QT Designer. That seems pointless.

                                Is there a simpler way to directly draw a progressbar style 'box' that goes vertically up the screen dependant on a variable (I know there will be... I just don't know it yet).

                                I do have to say the mixed/incorrect/random information about implementing these functions in QT Designer is very frustrating.

                                jsulmJ JonBJ 2 Replies Last reply
                                0
                                • S Stevolution

                                  Right, the problem with the progressbar is the co-ords.

                                  In QT Designer, it shows 480,60 20x191 as the co-ords for the Progressbar

                                  But i declare:

                                      self.Temp_bar = QProgressBar(self)
                                      self.Temp_bar.setGeometry(480, 60, 20 , 191)
                                      self.Temp_bar.setValue(350)
                                  

                                  and the Progress bar is way off the screen (so it was working - just not visible).

                                  The actual co-ords to get it anywhere near the position in QT Designer are (502, 820, 50 , 191) And they are not exact.
                                  Also, its going from top to bottom instead of as stated in QT Designer, and it's the wrong colour.

                                  So... have I made my own progress bar that has nothing to do with the design I made in QT Designer, or and I missing something that links them together? Hmm

                                  Edit/update.

                                  OK, its all incorrect. From what I understand, for some reason... all the settings in QT Designer are lost.
                                  I would need to set up a new style sheet to reproduce the one I made in QT Designer. That seems pointless.

                                  Is there a simpler way to directly draw a progressbar style 'box' that goes vertically up the screen dependant on a variable (I know there will be... I just don't know it yet).

                                  I do have to say the mixed/incorrect/random information about implementing these functions in QT Designer is very frustrating.

                                  jsulmJ Offline
                                  jsulmJ Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #28

                                  @Stevolution said in Changing the QLabel frameshape:

                                  In QT Designer, it shows 480,60 20x191 as the co-ords for the Progressbar
                                  But i declare:

                                  One moment: you have one progress bar in designer, but then you add one in code? Why don't you use the one from designer?

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  S 1 Reply Last reply
                                  1
                                  • S Stevolution

                                    Right, the problem with the progressbar is the co-ords.

                                    In QT Designer, it shows 480,60 20x191 as the co-ords for the Progressbar

                                    But i declare:

                                        self.Temp_bar = QProgressBar(self)
                                        self.Temp_bar.setGeometry(480, 60, 20 , 191)
                                        self.Temp_bar.setValue(350)
                                    

                                    and the Progress bar is way off the screen (so it was working - just not visible).

                                    The actual co-ords to get it anywhere near the position in QT Designer are (502, 820, 50 , 191) And they are not exact.
                                    Also, its going from top to bottom instead of as stated in QT Designer, and it's the wrong colour.

                                    So... have I made my own progress bar that has nothing to do with the design I made in QT Designer, or and I missing something that links them together? Hmm

                                    Edit/update.

                                    OK, its all incorrect. From what I understand, for some reason... all the settings in QT Designer are lost.
                                    I would need to set up a new style sheet to reproduce the one I made in QT Designer. That seems pointless.

                                    Is there a simpler way to directly draw a progressbar style 'box' that goes vertically up the screen dependant on a variable (I know there will be... I just don't know it yet).

                                    I do have to say the mixed/incorrect/random information about implementing these functions in QT Designer is very frustrating.

                                    JonBJ Offline
                                    JonBJ Offline
                                    JonB
                                    wrote on last edited by
                                    #29

                                    @Stevolution
                                    Just to say: there is absolutely nothing wrong with using Qt Designer to design your UI, and auto-generate the Python code which implements it, as you have been doing. The code it generates is easy to understand (if you choose to look at it, you don't have to), and essentially does what you would have to do yourself if you choose to do it manually instead. Especially if you are a beginner, it can ease you into Qt programming without having to learn everything about the classes from the outset. As you have discovered, you can mix static design-time elements with dynamically-created run-time elements as you please.

                                    Plenty of other toolsets have a visual designer as well as run-time coding. It is largely a matter of personal preference which you choose to use, and there are pros & cons of each approach. Many, but not all, Qt developers use Designer. This applies whether you use C++ or Python. So feel free to follow your chosen path either way.

                                    S 1 Reply Last reply
                                    1
                                    • jsulmJ jsulm

                                      @Stevolution said in Changing the QLabel frameshape:

                                      In QT Designer, it shows 480,60 20x191 as the co-ords for the Progressbar
                                      But i declare:

                                      One moment: you have one progress bar in designer, but then you add one in code? Why don't you use the one from designer?

                                      S Offline
                                      S Offline
                                      Stevolution
                                      wrote on last edited by
                                      #30

                                      @jsulm

                                      Well this is what I am trying to learn. This is my first Python code attempt!

                                      How do I access the one I designed in QT Designer? Googling shows examples such as the one I posted/used, but as you say... I think I have made another progress bar, rather than manage to access the one I made in QT Designer.

                                      My QT Designer progress bar is called Temp_bar, so I am not sure why it is not accessing it.
                                      If I don't state the setGeometry, then I cannot see any ProgressBar

                                      JonBJ 1 Reply Last reply
                                      0
                                      • JonBJ JonB

                                        @Stevolution
                                        Just to say: there is absolutely nothing wrong with using Qt Designer to design your UI, and auto-generate the Python code which implements it, as you have been doing. The code it generates is easy to understand (if you choose to look at it, you don't have to), and essentially does what you would have to do yourself if you choose to do it manually instead. Especially if you are a beginner, it can ease you into Qt programming without having to learn everything about the classes from the outset. As you have discovered, you can mix static design-time elements with dynamically-created run-time elements as you please.

                                        Plenty of other toolsets have a visual designer as well as run-time coding. It is largely a matter of personal preference which you choose to use, and there are pros & cons of each approach. Many, but not all, Qt developers use Designer. This applies whether you use C++ or Python. So feel free to follow your chosen path either way.

                                        S Offline
                                        S Offline
                                        Stevolution
                                        wrote on last edited by
                                        #31

                                        @JonB

                                        Where is the code it generates?

                                        1 Reply Last reply
                                        0
                                        • S Stevolution

                                          @jsulm

                                          Well this is what I am trying to learn. This is my first Python code attempt!

                                          How do I access the one I designed in QT Designer? Googling shows examples such as the one I posted/used, but as you say... I think I have made another progress bar, rather than manage to access the one I made in QT Designer.

                                          My QT Designer progress bar is called Temp_bar, so I am not sure why it is not accessing it.
                                          If I don't state the setGeometry, then I cannot see any ProgressBar

                                          JonBJ Offline
                                          JonBJ Offline
                                          JonB
                                          wrote on last edited by JonB
                                          #32

                                          @Stevolution
                                          I don't know what you called your design-time progress bar, but you go:

                                          self.Temp_bar = QProgressBar(self)
                                          

                                          As @jsulm said, here you are simply creating your own dynamic, run-time progress bar. If you already have one from designer you should use that one, no ... = QProgressBar(self) in your own code.

                                          For the code it generates:

                                          • I see you have from PyQt5.uic import loadUi. So I'm thinking you have chosen not to generate code, you just load the .ui dynamically at run-time via loadUi(). In that case, no Python code is being generated, so there is no source code to look at.

                                          • You could change to using pyuic5, which you run whenever you change the Designer .ui file content to generate a Python class code from it. In that case, you would find it creates a file named ui_form.py in your source folder where your form.ui file is.

                                          Have a read of e.g. https://stackoverflow.com/a/52471945/489865 for the pros & cons of each.

                                          See https://www.riverbankcomputing.com/static/Docs/PyQt5/designer.html for the various choices.

                                          So to summarise, you have 3 choices for how to do your UI code:

                                          1. Do not use Qt Designer, write the code yourself manually to create widgets dynamically at run-time.

                                          2. Use Designer to generate a .ui file. Use PyQt5.uic.loadUi() to load that file dynamically at run-time. No Python code is auto-generated.

                                          3. Run PyQt5's pyuic5 executable on the .ui file, generating a ui_....py file with a class/member variables for the elements. import this .py file into yours and access the class methods/variables.

                                          1 Reply Last reply
                                          1

                                          • Login

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