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.
[Share] Yet another way to create a std view
-
I am still working on making views with the designer. But it was getting a little muddy as it does. So I went back to code just to get a grip. Meaning I wanted to get clear in my head what I was trying to do.
But I did the below. Yes it's simple, but for me it is enlightening.
Anyway, I just share it. Make up your own mind''' Pythonista Forum - @Phuket2 ''' import ui, editor # hide_title_bar _htb = False # nothing now. but seems like the base. classes like NavigationBar, # ToolBar, could inherit functionality fromma class like frame class Frame(ui.View): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) class NavigationBar(ui.View): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.flex = 'w' self.height = 44 if _htb: self.height += 36 self.bg_color = 'purple' def layout(self): if self.superview: sv = self.superview self.width = sv.frame.width class ToolBar(ui.View): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.flex = 'w' self.height = 60 self.bg_color = 'orange' def layout(self): if self.superview: sv = self.superview self.width = sv.frame.width self.y = sv.frame.height - self.height class ContentView(ui.View): def __init__(self, ctl_list, *args, **kwargs): super().__init__(*args, **kwargs) self.flex = 'wh' self.ctl_list = ctl_list self.bg_color = 'red' self.bring_to_front() def layout(self): if self.superview: sv = self.superview self.width = sv.bounds.width h = sv.bounds.height if self.ctl_list[0]: self.y = self.ctl_list[0].bounds.max_y h-= self.ctl_list[0].bounds.height if self.ctl_list[1]: h-= self.ctl_list[1].bounds.height self.height = h class BaseViewClass(ui.View): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.flex = 'wh' self.cc = None # container class self.nv = None # Navigation Bar class self.tb = None # Toolbar class self.cv = None # ContentView class self.make_view() def make_view(self): self.cc = ui.View(frame = self.bounds) self.cc.flex = 'wh' self.nv = NavigationBar() self.tb = ToolBar() self.cv = ContentView([self.nv, self.tb]) self.cc.add_subview(self.nv) self.cc.add_subview(self.cv) self.cc.add_subview(self.tb) self.add_subview(self.cc) # in a way, ignore the above. just subclass BaseViewClass.. # can be a lot better, just a idea # ios has some well defined views, to composite a interface. class StdClass(BaseViewClass): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.cv.bg_color = 'deeppink' if __name__ == '__main__': # some switches here, for testing _use_theme = False w, h = 600, 800 f = (0, 0, w, h) style = 'sheet' style = 'panel' style = 'full_screen' # hide_title_bar _htb = False mc = StdClass(frame=f, bg_color='white') if not _use_theme: mc.present(style = style, animated=False, hide_title_bar = _htb) else: editor.present_themed(mc, theme_name='Oceanic', style=style, animated=False, hide_title_bar = _htb)
Edited: editor.present