Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
moving from tkinter to wxpython
#68
This is almost totally finished.
what remains to be done:
add volume, book and chapter to self.pages, so that when a chapter is selected,
the keys for fetching the audio file are at your fingertips.
then code for actually playing the audio file
There is already a method that will return a path to the mp3 file:
get_mp3_filepath(self, volume, book, chapter)
here's the code as it stands. I'm taking the rest of the evening off.
You can finish if you like, or wait until my tomorrow. EST time zone
code (not on github 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 = self.get_book_list()

        self.chapter_list = None

        # dictionary to hold all notebook pages
        self.pages = {}
        self.current_page = None

        # Button position and dimensions
        self.button_width = 110
        self.button_height = 36
        self.button_hover_color = '#87ceeb'
        self.button_normal_color = '#f8fcfe'

        self.left_x = 5
        self.upper_left_y = 5

        self.x_increment = 150
        self.y_increment = 55

        self.x_max = width

        self.create_application()
        self.frame.Show()
        self.app.MainLoop()

    def get_book_list(self):
        book_list = []
        for key, value in self.bible.items():
            for key1, value1 in value.items():
                if key == self.ot:
                    book_list.append(['OT', key1])
                else:
                    book_list.append(['NT', key1])
        return book_list

    def create_application(self):
        self.create_notebook()
        self.create_index_page()
        self.create_book_pages()

    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):
        xpos = self.left_x
        ypos = self.upper_left_y
        page['buttons'] = {}
        for btn in button_list:

            if isinstance(btn, list):
                button_name = f'{btn[0]} {btn[1]}'
            else:
                button_name = btn

            bloc = 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}')
            bloc.name = [button_name, page]
            xpos += self.x_increment
            if xpos >= self.x_max:
                ypos += self.y_increment
                xpos = self.left_x
            bloc.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, bloc)
            bloc.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, bloc)
            bloc.Bind(wx.EVT_BUTTON, self.OnClick, bloc)

        # self.page['buttons'][button_name].Bind(wx.EVT_BUTTON, self.set_page)

    def OnEnterWindow(self, event):
        namelist = event.GetEventObject().name
        name = namelist[0]
        page = namelist[1]
        page['buttons'][name].SetBackgroundColour(self.button_hover_color)

    def OnExitWindow(self, event):
        namelist = event.GetEventObject().name
        name = namelist[0]
        page = namelist[1]
        page['buttons'][name].SetBackgroundColour(self.button_normal_color)

    def OnClick(self, event):
        namelist = event.GetEventObject().name
        # print(self.pages)
        name = namelist[0]
        page = namelist[1]
        # print(f'name: {name}')

    def get_mp3_filepath(self, volume, book, chapter):
        mp3path = self.bible[volume][book][chapter]['mp3path']
        print(f'mp3path: {mp3path}')
        fullpath = self.bpath.KingJamesAudiopath / mp3path[0] / mp3path[1]
        return fullpath

    def get_chapter_list(self, item):
        if item[0] == 'OT':
            volume = 'Old Testament'
        else:
            volume = 'New Testament'
        chapter_list = []
        for key, value in self.bible[volume][item[1]].items():
            if str(key).startswith('chap'):
                continue
            chapter_list.append(key)
        return chapter_list

    def create_index_page(self):
        self.current_page = self.add_page('Index')
        index_button_labels = []
        for item in self.book_list:
            index_button_labels.append(f'{item[0]}-{item[1]}')
        self.add_buttons(self.current_page, 'Index', index_button_labels)

    def create_book_pages(self):
        for item in self.book_list:
            title = item[1]
            self.current_page = self.add_page(item[1])
            chapter_list = self.get_chapter_list(item)
            self.add_buttons(self.current_page, title, chapter_list)

    def OnPageChanged(self, event):
        pass

    def OnPageChanging(self, event):
        pass

    def OnClose(self):
        self.app.Destroy()

if __name__ == '__main__':
    BibleNB(None, width=1200)
Reply


Messages In This Thread
moving from tkinter to wxpython - by Barrowman - Feb-18-2018, 11:09 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-18-2018, 11:26 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-19-2018, 05:40 AM
RE: moving from tkinter to wxpython - by Barrowman - Feb-19-2018, 08:21 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-19-2018, 09:31 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-20-2018, 03:49 AM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-20-2018, 05:51 AM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-20-2018, 01:10 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-20-2018, 09:20 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-20-2018, 11:11 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-21-2018, 11:25 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-22-2018, 02:37 AM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-22-2018, 02:48 AM
RE: moving from tkinter to wxpython - by Barrowman - Feb-22-2018, 12:06 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-22-2018, 12:22 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-22-2018, 05:51 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-22-2018, 06:51 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-23-2018, 12:05 AM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-23-2018, 02:29 AM
RE: moving from tkinter to wxpython - by Barrowman - Feb-26-2018, 07:04 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-26-2018, 08:45 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-27-2018, 07:54 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-27-2018, 10:47 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-27-2018, 11:15 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-28-2018, 09:15 AM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-28-2018, 10:52 AM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-28-2018, 01:10 PM
RE: moving from tkinter to wxpython - by Barrowman - Feb-28-2018, 02:56 PM
RE: moving from tkinter to wxpython - by Larz60+ - Feb-28-2018, 05:19 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-01-2018, 02:23 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-01-2018, 01:17 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-03-2018, 10:49 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-04-2018, 12:47 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-04-2018, 01:07 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-04-2018, 07:47 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-04-2018, 01:34 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-04-2018, 03:36 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-04-2018, 10:47 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-04-2018, 01:41 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-04-2018, 04:13 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-04-2018, 05:23 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-04-2018, 06:19 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-06-2018, 10:01 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-07-2018, 04:01 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-08-2018, 01:32 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-07-2018, 10:18 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-08-2018, 11:06 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-08-2018, 01:16 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-08-2018, 05:50 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-08-2018, 06:10 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-09-2018, 02:36 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-09-2018, 02:49 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-09-2018, 09:03 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-09-2018, 05:16 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-09-2018, 06:08 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-09-2018, 06:33 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-10-2018, 04:52 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-10-2018, 08:45 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-10-2018, 08:55 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-11-2018, 06:20 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-11-2018, 09:21 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-12-2018, 01:44 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-12-2018, 03:39 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-13-2018, 04:33 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-13-2018, 10:12 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-13-2018, 05:58 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-13-2018, 02:29 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-13-2018, 11:17 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-14-2018, 09:02 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-14-2018, 12:01 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-14-2018, 08:52 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-14-2018, 10:00 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-15-2018, 02:13 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-16-2018, 01:04 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-16-2018, 09:36 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-16-2018, 10:16 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-17-2018, 07:19 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-19-2018, 03:13 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-20-2018, 08:45 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-20-2018, 10:47 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-21-2018, 12:27 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-21-2018, 03:42 AM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-21-2018, 05:37 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-23-2018, 10:58 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-23-2018, 04:49 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-23-2018, 06:14 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-23-2018, 08:15 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-23-2018, 09:43 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-24-2018, 10:10 AM
RE: moving from tkinter to wxpython - by Barrowman - Mar-24-2018, 05:11 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-24-2018, 06:30 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-24-2018, 08:28 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-24-2018, 08:58 PM
RE: moving from tkinter to wxpython - by Barrowman - Mar-24-2018, 09:41 PM
RE: moving from tkinter to wxpython - by Larz60+ - Mar-25-2018, 12:39 AM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020