omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Getting a List of all ui GUI classes programmatically

    Pythonista
    5
    13
    5083
    Loading More Posts
    • 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.
    • Phuket2
      Phuket2 last edited by

      @dgelessus, thanks so much. However, it makes me want to cry. Not literally, but still going through growing pains learning python. I really love python, but a lot to learn. Maybe it's my learning technique, learning out of order. Also going pretty slow, only ever doing python on my iPad. No external keyboard.
      I apologise, this is more a Python language question than Pythonistia question. Did not realise that until I saw your response.
      Thanks again, exactly what I needed. I would never have come up with this myself. At least not now.

      1 Reply Last reply Reply Quote 0
      • Phuket2
        Phuket2 @dgelessus last edited by

        @dgelessus , I am not sure if this was broken at the time or not. But if you want a list of ui elements aka controls this includes extras you don't want. Example ui.ActivityIndicator, ui.TableViewCell
        From what I can see you can't filter them our without using there names. I have also tried numerous other ways, but I can't figure out a way to isolate only the user interface controls without having to get very specific 😰
        Maybe there is a way i can not see.

        JonB 1 Reply Last reply Reply Quote 0
        • dgelessus
          dgelessus last edited by

          There's no way to tell from code which classes count as "interface controls" and which don't. One solution would be to use a "blacklist" as you said, you could add a condition like and cls not in (ui.ActivityIndicator, ui.TableViewCell) to do that. Or you could decide based on the name (which you can access with cls.__name__) and do something like and cls.__name__.endswith("View").

          1 Reply Last reply Reply Quote 0
          • ccc
            ccc last edited by ccc

            isinstance() and issubclass() also can take a tuple for the second param as in isinstance(obj, (ui.ActivityIndicator, ui.TableViewCell)).

            Webmaster4o 1 Reply Last reply Reply Quote 3
            • Webmaster4o
              Webmaster4o @ccc last edited by

              @ccc I love these tuple arguments when they're available. I use them all the time. I wish more of the builtins had that functionality, honestly, things like

              replace(('Cats','Dogs'),'Animals')
              

              would be really useful.

              1 Reply Last reply Reply Quote 1
              • JonB
                JonB @Phuket2 last edited by JonB

                @Phuket2
                I can understand not wanting to include TableViewCell... but activityindicator seems like like a perfectly valid element. It can be added as a subview, etc.

                try is very pythonic... it would also let you support custom ui elements that you don't know about yet.

                1 Reply Last reply Reply Quote 0
                • Phuket2
                  Phuket2 last edited by

                  Ok, thanks guys. Interesting about the activity indicator. I have to take a breath and read about it. It's the 2 nd time something useful has popped up about that.
                  Well at least I know I was doing as much as I could now. I thought a good chance I was missing something

                  1 Reply Last reply Reply Quote 0
                  • ccc
                    ccc last edited by ccc

                    @Webmaster4o your .replace() takes a tuple idea is brilliant. (RTT has a nice ring to it.) You should propose it as a change to the Python Standard Library. In my book it is a great idea that would be broadly applicable. The Python community is looking for improvements that push developers to adopt Python 3 over Python 2 and this kind of improvement might fall nicely into that category. It would be fun to find out who the youngest PEP author is.... Maybe you could even break a record while contributing to core Python.

                    1 Reply Last reply Reply Quote 2
                    • Phuket2
                      Phuket2 last edited by

                      I am not sure what you think about the below pattern to get a list of ui controls in a list comp (I hope I am not embarrassing myself again 😱). I still struggled with it. I used vars(ui).values() instead of playing with dir. I can see the vars way returns a lot of data to iterate through. But it looks the most conise way to me.
                      But I did many variations. Start to get a brain freeze after a while. I kept in ActivityIndicator, but still appreciate the comments about passing tuples to issublass for example. I didn't know about that. Well, I don't know most. But I did try the notation, worked as advertised.

                      import ui
                      
                      x = [cls for cls in vars(ui).values() if hasattr(cls, 'alpha') and not issubclass(cls, ui.TableViewCell)]
                      print x, len(x)
                      
                      1 Reply Last reply Reply Quote 0
                      • dgelessus
                        dgelessus last edited by

                        @ccc I doubt a PEP would be necessary for this. @Webmaster4o The idea sounds good though.

                        Phuket2 1 Reply Last reply Reply Quote 0
                        • Phuket2
                          Phuket2 @dgelessus last edited by Phuket2

                          @dgelessus , oops sorry I now see where I got the vars.values() from. I thought I had found it in stackflow. Sorry, you give the complete answer already. I must have seen it last night and it stayed in my head. It still took me a while to get to your solution today 😂😂 sorry, I really didn't mean to plagiarize you. But I just realised I did.

                          Edit. Was a BLE (BlackLabelError) I think there should be a PEP for that 🤕

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post
                          Powered by NodeBB Forums | Contributors