Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
moving from tkinter to wxpython
#78
It's late, so the following is not on GitHub yet, but thought I'd share.
I did a major re-write of a few of the methods in the KJ_BibleApp.py program.
As the code materialized, I realized that there were things that could be made more efficient,
thus yet another version. But (from an old (1960's?) breakfast cereal ad) 'Mikey likes it'.

This now includes an 'info' entry in the page dictionary that allows events to have all of the
keys necessary to access any part of the bible dictionary for any given event. There is currently a lot
of verbose text being generated as the mouse is moved around, but that's what I want for now. I need to
get caught up on my sleep, and try to maintain a human day/night cycle (if possible).

so here's the new moving target!
KJ_BibleApp.py
import BiblePaths
import json
import wx
import codecs


class KJ_BibleApp:
    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.frame)

        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()

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

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

        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 create_application(self):
        self.create_notebook()
        self.create_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 get_book_list(self):
        # Each entry is list[volume, book, chapters]
        # Chapters is the number of chapters
        book_list = []
        for volume, value in self.bible.items():
            for book, value1 in value.items():
                chapters = 0
                for chapter, unused in value1.items():
                    if chapter.isdigit():
                        chapters += 1
                book_list.append([volume, book, chapters])
        return book_list

    def new_button(self, button, panel, label_text, btn_name, xpos, ypos):
        button = wx.Button(panel, id=wx.ID_ANY,
                            label=label_text,
                            pos=(xpos, ypos),
                            size=(self.button_width, self.button_height),
                            name=btn_name)
        return button

    def new_xy(self, xpos, ypos):
        xpos += self.x_increment
        if xpos >= self.x_max:
            ypos += self.y_increment
            xpos = self.left_x
        return xpos, ypos

    def create_pages(self):
        xpos = self.left_x
        ypos = self.upper_left_y
        page = {}
        # / =============== Index page is special ===============
        page['Index'] = {}
        page['Index']['panel'] = wx.Panel(self.nb, id=wx.ID_ANY, style=wx.CLIP_CHILDREN)
        page['Index']['page'] = self.nb.AddPage(page['Index']['panel'], text='Index')
        # Index buttons
        for volume, book, unused in self.book_list:
            chapter = None
            label_text = book
            btn_name = book
            pageidx = page['Index'][book] = {}
            btn = pageidx['button'] = self.new_button(pageidx, page['Index']['panel'], label_text,
                                                      btn_name, xpos, ypos)
            pinfo = pageidx['info'] = {}
            pinfo['volume'] = volume
            pinfo['book'] = book
            pinfo['chapter'] = None
            btn.name = [volume, book, chapter, page]
            # Add additional user info as pinfo['userinfo'] = value
            # where userinfo replaced by meaningful name
            btn.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, btn)
            btn.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, btn)
            btn.Bind(wx.EVT_BUTTON, self.OnClick, btn)
            xpos, ypos = self.new_xy(xpos, ypos)

        # =============== chapter pages ===============
        for volume, book, chapters in self.book_list:
            page[book] = {}
            page[book]['panel'] = wx.Panel(self.nb, id=wx.ID_ANY, style=wx.CLIP_CHILDREN)
            page[book]['page'] = self.nb.AddPage(page[book]['panel'], text=book)
            xpos = self.left_x
            ypos = self.upper_left_y
            for chapter in range(chapters):
                chapter += 1
                label_text = f'{book}:{chapter}'
                pageidx = page[book][chapter] = {}
                btn = pageidx['button'] = self.new_button(pageidx, page[book]['panel'], label_text,
                                                          btn_name, xpos, ypos)
                pinfo = pageidx['info'] = {}
                pinfo['volume'] = volume
                pinfo['book'] = book
                pinfo['chapter'] = chapter
                btn.name = [volume, book, chapter, page]
                # Add additional user info as pinfo['userinfo'] = value
                # where userinfo replaced by meaningful name
                btn.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, btn)
                btn.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, btn)
                btn.Bind(wx.EVT_BUTTON, self.OnClick, btn)
                xpos, ypos = self.new_xy(xpos, ypos)

    def OnEnterWindow(self, event):
        volume, book, chapter, page = event.GetEventObject().name
        print(f'volume: {volume}, book: {book}, chapter: {chapter}')
        #page['buttons'][name].SetBackgroundColour(self.button_hover_color)

    def OnExitWindow(self, event):
        volume, book, chapter, page = event.GetEventObject().name
        print(f'volume: {volume}, book: {book}, chapter: {chapter}')
        # page['buttons'][name].SetBackgroundColour(self.button_normal_color)

    def OnClick(self, event):
        volume, book, chapter, page = event.GetEventObject().name
        print(f'volume: {volume}, book: {book}, chapter: {chapter}')

    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 OnPageChanged(self, event):
        pass

    def OnPageChanging(self, event):
        pass

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

if __name__ == '__main__':
    KJ_BibleApp(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