[Suggestion] ui.left_button_items and right - Not be None. Either a empty tuple or list or a property access
@omz, maybe a lack of my Python ability, but I find it difficult working with ui.left_button_items and ui.right_button_items. I just have to write a lot more code than I feel I need to.
have to deal with None all the time. Would seem like a empty list would be so much better. Or something so it could be iterated over safely. Maybe I am missing a Python fundamental here dealing with None. But it just seems harder than it needs to be
Sorry for the crazy tags, but hit the 15 char limit
I never had any issues with them being
None, but the fact that they are tuples rather than lists makes it very annoying to add an extra button or replace an existing one. I'd guess that this is a technical limitation though - if it were a list, the "owning" view would not notice when the list is changed, only when it is replaced entirely. This would probably require a custom list subclass to work properly.
@dgelessus , yes I see your point about the mutable types is a problem. Can't have that. But then could supply a r/o property.
I guess it's not a big deal. But I think it makes more sense. You can't do a list comp on right_button_items/left without first checking for none.
The code below works, as long as ui.left_button_items and right_… is not None
I wanted this because I want to disable all the buttons in the menu. But as well, save their enabled state so I can restore their state correctly.
Again, not critical. But it just doesn't feel right to write it in a more obscure way if you don't have to.
import ui v = ui.View(frame = (0,0,500,500)) btn_l0 = ui.ButtonItem('left0') btn_r0 = ui.ButtonItem('right0') v.left_button_items = [btn_l0] v.right_button_items = [btn_r0] btns = [ (btn, btn.enabled) for btn in v.left_button_items + v.right_button_items if isinstance(btn , ui.ButtonItem)] print btns v.present('sheet')
Anyway would be to propose None is iterable 0 times , LOL, not thought out that comment 😁