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. How to replace QWidget name dynamically with variable
Forum Update on Monday, May 27th 2025

How to replace QWidget name dynamically with variable

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 5 Posters 2.6k 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi
    Cant you just put
    self.dlg.name1
    self.dlg.name2
    etc
    into a list ?

    You can also build this list automatically from DLG
    https://doc.qt.io/qt-5/qobject.html#findChildren

    Q 1 Reply Last reply
    0
    • mrjjM mrjj

      Hi
      Cant you just put
      self.dlg.name1
      self.dlg.name2
      etc
      into a list ?

      You can also build this list automatically from DLG
      https://doc.qt.io/qt-5/qobject.html#findChildren

      Q Offline
      Q Offline
      qtnoob420
      wrote on last edited by
      #3

      @mrjj my thought is to get relevant fields that i need to work with from QGIS and then adress my QLineEdits, QCheckboxes, etc with that.

      For every of my input field i have a label too. wouldnt they be found too with "findchildren"?

      jsulmJ 1 Reply Last reply
      0
      • Q qtnoob420

        @mrjj my thought is to get relevant fields that i need to work with from QGIS and then adress my QLineEdits, QCheckboxes, etc with that.

        For every of my input field i have a label too. wouldnt they be found too with "findchildren"?

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

        @qtnoob420 If you want to access your widgets using a string then you could simply put your widgets in a dictionary. This would be way faster than using findChildren.

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

        Q 2 Replies Last reply
        1
        • jsulmJ jsulm

          @qtnoob420 If you want to access your widgets using a string then you could simply put your widgets in a dictionary. This would be way faster than using findChildren.

          Q Offline
          Q Offline
          qtnoob420
          wrote on last edited by
          #5

          @jsulm it's not that i explicitly want to do it that way, but that I don't know any other way. I don't have the experience and the knowledge i guess

          1 Reply Last reply
          0
          • jsulmJ jsulm

            @qtnoob420 If you want to access your widgets using a string then you could simply put your widgets in a dictionary. This would be way faster than using findChildren.

            Q Offline
            Q Offline
            qtnoob420
            wrote on last edited by
            #6

            @jsulm can you provide me any help on how to do that?

            mrjjM JonBJ 2 Replies Last reply
            0
            • Q qtnoob420

              @jsulm can you provide me any help on how to do that?

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #7

              @qtnoob420
              Hi

              Something like

              a_dict = dict()
              a_dict["name"] = self.dlg.name1
              a_dict["name3"] = self.dlg.name2

              and you can look up the self.dlg.name1 widget with "name"

              "name" is the actual name of the widget. (objectname)

              Q 1 Reply Last reply
              1
              • Q qtnoob420

                @jsulm can you provide me any help on how to do that?

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

                @qtnoob420
                Python has a dict type, to store an arbitrary set of key-value pairs.

                If you want to do as @jsulm said and "access your widgets using a string" you could do something like:

                widgets = dict()
                widgets["name1"] = self.dlg.name1
                widgets["name2"] = self.dlg.name2
                ...
                

                You can then access, say, self.dlg.name2 via widgets["name2"]. You can also iterate through all of them, keys and values, via

                for key in widgets:
                     print(key, '->', widgets[key])
                

                If you don't want key names you can of course do similar by just storing them in a list/array instead of a dictionary.

                Q 1 Reply Last reply
                2
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  Hi,

                  There might be some stuff doable with some Python introspection or even just using QObject's objectName method.

                  Can you show the code of the class of your self.dlg variable ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  0
                  • mrjjM mrjj

                    @qtnoob420
                    Hi

                    Something like

                    a_dict = dict()
                    a_dict["name"] = self.dlg.name1
                    a_dict["name3"] = self.dlg.name2

                    and you can look up the self.dlg.name1 widget with "name"

                    "name" is the actual name of the widget. (objectname)

                    Q Offline
                    Q Offline
                    qtnoob420
                    wrote on last edited by
                    #10

                    @mrjj okay i got this so far.
                    now i want to set values of my fields like this...

                    a_dict["name"].setText("some text")
                    

                    but i get the error:

                    a_dict["name"].setText("some text")
                    AttributeError: 'str' object has no attribute 'setText'
                    
                    jsulmJ 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @qtnoob420
                      Python has a dict type, to store an arbitrary set of key-value pairs.

                      If you want to do as @jsulm said and "access your widgets using a string" you could do something like:

                      widgets = dict()
                      widgets["name1"] = self.dlg.name1
                      widgets["name2"] = self.dlg.name2
                      ...
                      

                      You can then access, say, self.dlg.name2 via widgets["name2"]. You can also iterate through all of them, keys and values, via

                      for key in widgets:
                           print(key, '->', widgets[key])
                      

                      If you don't want key names you can of course do similar by just storing them in a list/array instead of a dictionary.

                      Q Offline
                      Q Offline
                      qtnoob420
                      wrote on last edited by
                      #11

                      @JonB i am still not able to address them like i imagine to.
                      if i try to set values of my field like:

                      a_dict["name"].setText("some text")
                      

                      i get the error:

                      AttributeError: 'str' object has no attribute 'setText'
                      
                      1 Reply Last reply
                      0
                      • Q qtnoob420

                        @mrjj okay i got this so far.
                        now i want to set values of my fields like this...

                        a_dict["name"].setText("some text")
                        

                        but i get the error:

                        a_dict["name"].setText("some text")
                        AttributeError: 'str' object has no attribute 'setText'
                        
                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        @qtnoob420 said in How to replace QWidget name dynamically with variable:

                        a_dict["name"]

                        What did you store there? Can you show how (and what) you set it (a_dict["name"]=...).
                        What does type(a_dict["name"]) print out?
                        It seems you put a string there...

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

                        Q 1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @qtnoob420 said in How to replace QWidget name dynamically with variable:

                          a_dict["name"]

                          What did you store there? Can you show how (and what) you set it (a_dict["name"]=...).
                          What does type(a_dict["name"]) print out?
                          It seems you put a string there...

                          Q Offline
                          Q Offline
                          qtnoob420
                          wrote on last edited by
                          #13

                          @jsulm oh youre right. but idk how i could assign them in an other way:

                          i assigned them like:

                          a_dict[attribute] = "self.dlg."+attribute
                          

                          attribute is the name of the attributes from QGIS. and i named my QWidgets in a similar way to match them.

                          jsulmJ 1 Reply Last reply
                          0
                          • Q qtnoob420

                            @jsulm oh youre right. but idk how i could assign them in an other way:

                            i assigned them like:

                            a_dict[attribute] = "self.dlg."+attribute
                            

                            attribute is the name of the attributes from QGIS. and i named my QWidgets in a similar way to match them.

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

                            @qtnoob420 Well, you are assigning a string. So, how should that work?
                            Why don't you assign self.dlg.attribute? Where attribute is the name of the attribute.
                            Also, what type is self.dlg?

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

                            Q 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @qtnoob420 Well, you are assigning a string. So, how should that work?
                              Why don't you assign self.dlg.attribute? Where attribute is the name of the attribute.
                              Also, what type is self.dlg?

                              Q Offline
                              Q Offline
                              qtnoob420
                              wrote on last edited by
                              #15

                              @jsulm it makes completely sense, i just dont know how :(

                              i tried stuff like...

                              a_dict[attribute] = self.dlg.attribute
                              AttributeError: 'BaumkatasterDialog' object has no attribute 'attribute'
                              
                              
                              feature_dict[attribute] = self.dlg.+attribute
                              SyntaxError: invalid syntax
                              
                              

                              ... which doesnt work either. i just dont know no better

                              i used the PluginBuilder3 so it was created by the plugin. i can access all of my UI Widgets from the QtDesigner with "self.dlg.widget_name"

                              jsulmJ 1 Reply Last reply
                              0
                              • Q qtnoob420

                                @jsulm it makes completely sense, i just dont know how :(

                                i tried stuff like...

                                a_dict[attribute] = self.dlg.attribute
                                AttributeError: 'BaumkatasterDialog' object has no attribute 'attribute'
                                
                                
                                feature_dict[attribute] = self.dlg.+attribute
                                SyntaxError: invalid syntax
                                
                                

                                ... which doesnt work either. i just dont know no better

                                i used the PluginBuilder3 so it was created by the plugin. i can access all of my UI Widgets from the QtDesigner with "self.dlg.widget_name"

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

                                @qtnoob420 As I said: use real name of the attribute, not the word "attribute". Example: if you have attribute called "a" then do:

                                a_dict[attribute] = self.dlg.a
                                

                                But it seems that you only have strings containing attribute names, right?
                                Then you could do it like this:

                                f = getattr(self.dlg, attribute)
                                f() # Here we call attribute
                                

                                You do not even need a dictionary.
                                One example for string in Python:

                                s="abc"
                                f=getattr(s, "upper")
                                f() # prints ABC
                                

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

                                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