1

I have code that looks something like this:

self.ui.foo.setEnabled(False)
self.ui.bar.setEnabled(False)
self.ui.item.setEnabled(False)
self.ui.item2.setEnabled(False)
self.ui.item3.setEnabled(False)

And I would like to turn it into something like this:

items = [foo,bar,item,item2,item3]
for elm in items:
    self.ui.elm.setEnabled(False)

But obviously just having the variables in the list with out the 'self.ui' part is invalid, and I would rather not type out 'self.ui' for every element in the list, because that really isn't to much better. How could I rewrite my first code to make it something like what I'm talking about?

2 Answers 2

4

Grab the object to have the function called on it by its attribute name using the built-in getattr function:

items = ['foo', 'bar', 'item', 'item2', 'item3']
for elm in items:
    getattr(self.ui, elm).setEnabled(False)
Sign up to request clarification or add additional context in comments.

Comments

-3

You could try something like:

items = [foo,bar,item,item2,item3]
ui = self.ui
for elm in items:
    ui.elm.setEnabled(False)

1 Comment

When adding just the items foo,bar to the list items, you are referencing variables that do not exist. self.ui.foo != foo

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.