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 @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