Mar-13-2018, 05:58 AM
Here's a sample of what the code looks like, the index page displays, but nothing else working yet:
import BiblePaths import json import wx class BibleNB: def __init__(self, parent, id = wx.ID_ANY, title = "Bible for the Blind", xpos=20, ypos=20, width=1200, height=600, style=wx.DEFAULT_FRAME_STYLE): self.bpath = BiblePaths.BiblePaths() self.app = wx.App() self.frame = wx.Frame(None, id=wx.ID_ANY, title=title, pos=(xpos, ypos), size=(width, height), style=style) self.app.Bind(wx.EVT_CLOSE, self.OnClose) self.app.SetTopWindow(self) with self.bpath.IndexedBible.open() as f: self.bible = json.load(f) self.ot = 'Old Testament' self.nt = 'New Testament' self.book_list = list(self.bible[self.ot].keys()) + list(self.bible[self.nt].keys()) self.books = list(self.bible['Old Testament'].keys()) + \ list(self.bible['New Testament'].keys()) # dictionary to hold all notebook pages self.pages = {} # Button position and dimensions self.button_width = 110 self.button_height = 36 self.left_x = 5 self.upper_left_y = 5 self.x_increment = 150 self.y_increment = 55 self.x_max = width count = self.get_chapter_count('Old Testament', 'Genesis') print(f'Genesis chapters: {count}') self.create_application() self.frame.Show() self.app.MainLoop() def create_application(self): self.create_notebook() self.create_index_page() def get_chapter_count(self, volume, book): return len(self.bible[volume][book]) def create_notebook(self): self.nb = wx.Notebook(self.frame, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name=wx.NotebookNameStr) self.nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) self.nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging) def set_page(self, event): self.nb.SetSelection(self.pages['Index']['panel']) event.skip() def add_page(self, title): self.pages[title] = {} self.pages[title]['panel'] = wx.Panel(self.nb, id=wx.ID_ANY, style=wx.CLIP_CHILDREN) self.nb.AddPage(self.pages[title]['panel'], text=title) return self.pages[title] def add_buttons(self, page, title, button_list): print(f'button_list: {button_list}') xpos = self.left_x ypos = self.upper_left_y page['buttons'] = {} # Button(parent, id=ID_ANY, label="", pos=DefaultPosition, # size=DefaultSize, style=0, validator=DefaultValidator, # name=ButtonNameStr) for button_name in button_list: page['buttons'][button_name] = wx.Button(page['panel'], id=wx.ID_ANY, label=button_name, pos=(xpos, ypos), size=(self.button_width, self.button_height), name=f'btn_{button_name}') xpos += self.x_increment if xpos >= self.x_max: ypos += self.y_increment xpos = self.left_x # self.page['buttons'][button_name].Bind(wx.EVT_BUTTON, self.set_page) def create_index_page(self): self.index_page = self.add_page('Index') self.add_buttons(self.index_page, 'Index', self.book_list) def OnPageChanged(self): pass def OnPageChanging(self): pass def OnClose(self): self.app.Destroy() if __name__ == '__main__': BibleNB(None, width=1200)Screenshot: