Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
moving from tkinter to wxpython
#32
I have had a few things to do but am now near to finishing this project as far as it goes running on Linux. Problems were on 2 fronts. The mp3 files which were the Bible chapters did not stich to the same naming convention throughout. I tried to accommodate the different naming but in the end I wrote a script to go through them and make most of them consistent but a few I edited manually. The other problem was that Psalms has 150 chapters and with the size of the buttons it wasn't practical to display them all on screen and with the code I have I couldn't see how to make that page scroll. In the end I have put half in order and tacked the rest at the end.
I still have some audio clips to make but i think it's mostly working otherwise.
After that I will have to see if I can convert it for Windows. Whether this is by altering the code or using something like py2exe I don't know yet. I realise the directories will need altering but I wonder if anyone has any suggestions to make the code better?
Most of this work would not have been accomplished without the help of the many suggestions and code from Larz60+
I will let my friend try it out on my laptop and hope she likes it.

#!/usr/bin/env python3
import sys
import wx
import os
books = ['67', 'Genesis050', 'Exodus040', 'Leviticus027', 'Numbers036', 'Deuteronomy034', 'Joshua024', 'Judges021',
         'Ruth004', '1Samuel031', '2Samuel024', '1Kings022', '2Kings025', '1Chronicles029', '2Chronicles036',
         'Ezra010', 'Nehemiah013', 'Esther010', 'Job042', 'Psalms075', 'Proverbs031', 'Ecclesiastes012',
         'Song of Solomon008', 'Isaiah066', 'Jeremiah052', 'Lamentations005', 'Ezekiel048', 'Daniel012', 'Hosea014',
         'Joel003', 'Amos009', 'Obadiah001', 'Jonah004', 'Micah007', 'Nahum003', 'Habakkuk003', 'Zephaniah003',
         'Haggai002', 'Zechariah014', 'Malachi004', 'Matthew028', 'Mark016', 'Luke024', 'John021', 'Acts028',
         'Romans016', '1Corinthians016', '2Corinthians013', 'Galatians006', 'Ephesians006', 'Philippians004',
         'Colossians004', '1Thessalonians005', '2Thessalonians003', '1Timothy006', '2Timothy004', 'Titus003',
         'Philemon001', 'Hebrews013', 'James005', '1Peter005', '2Peter003', '1John005', '2John001', '3John001',
         'Jude001', 'Revelation022', 'Psalms150'] 

chapters = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150]
 
book_names = [0,'/home/norman/Blind/recordings/genesis.mp3', '/home/norman/Blind/recordings/exodus.mp3', '/home/norman/Blind/recordings/leviticus.mp3','/home/norman/Blind/recordings/numbers.mp3','/home/norman/Blind/recordings/deuteronomy.mp3','/home/norman/Blind/recordings/joshua.mp3','/home/norman/Blind/recordings/judges.mp3','/home/norman/Blind/recordings/ruth.mp3','/home/norman/Blind/recordings/1samual.mp3','/home/norman/Blind/recordings/2samual.mp3','/home/norman/Blind/recordings/1kings.mp3','/home/norman/Blind/recordings/2kings.mp3','/home/norman/Blind/recordings/1chronicles.mp3','/home/norman/Blind/recordings/2chronicles.mp3', '/home/norman/Blind/recordings/ezra.mp3', '/home/norman/Blind/recordings/nehemiah.mp3','/home/norman/Blind/recordings/esther.mp3','/home/norman/Blind/recordings/job.mp3','/home/norman/Blind/recordings/psalms.mp3','/home/norman/Blind/recordings/proverbs.mp3','/home/norman/Blind/recordings/ecclesiastes.mp3', 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150]
 
 
class Log:
    def WriteText(self, text):
        if text[-1:] == '\n':
            text = text[:-1]
        wx.LogMessage(text)
 
    write = WriteText
 
class BibleNB(wx.Frame):
    def __init__(self, parent, id=wx.ID_ANY, title="Bible For The Blind", xpos=20, ypos=20, width=1000,
                 height=600, style=wx.DEFAULT_FRAME_STYLE, name='BibleApp'):
                # ideal width x height ratio: 16:9
        app = wx.App()
        wx.Frame.__init__(self, parent, id=id, title=title, pos=(xpos, ypos), size=(width, height), style=style)
        self.Bind(wx.EVT_CLOSE,self.OnClose)
        app.SetTopWindow(self)
        self.create_notebook()
        app.MainLoop()
 
    def create_notebook(self):
        wx.Log.SetActiveTarget(wx.LogStderr())
        log = Log()
        # for size use 16:9 ratio for best appearence
#        yfactor = 16/9
        width = 1200
        height = 600 #int(width / yfactor)
        self.frame =  wx.Frame(self,
                               id=wx.ID_ANY,
                               title='Bible For The Blind',
                               pos=(20, 20),
                               size=(width, height),
                               style=wx.DEFAULT_FRAME_STYLE,
                               name=wx.FrameNameStr)
 
        self.nb = wx.Notebook(self.frame, id=wx.ID_ANY, style=wx.BK_DEFAULT)
        self.log = log
        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging)
        column = 0
        row = 0
        pge = "Index" #books[pagenum]
        thispage = pge[:-3]
        win = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
            # win = self.makeColorPanel(wx.WHITE)
        win.SetSize(self.GetBestSize())
            # st.SetForegroundColour(wx.BLACK)
            # self.nb.AddPage(win, thispage)
        self.nb.AddPage(win, thispage)
)
        column = 0
        row = 0
        for nums in range(1, 67):
            nme = books[nums]
            name = nme[:-3]
            btn = 'butt' + str(nums)
            btn = wx.Button(win, -1, name, pos=(column, row), size=(110, 36))
            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)
            column += 150
            if column == 1200:
                column = 0
                row += 55
        nums = 67
        btn = "butt" + str(nums)
        btn = wx.Button(win, -1, "Psalms ove 75", pos=(column, row), size=(110, 36)) 
        btn.Bind(wx.EVT_BUTTON, self.OnHighClick,btn)
        btn.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, btn)
        btn.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, btn)
        column += 150
        if column == 1200:
            column = 0
            row += 55
        nums = 68    
        btn = 'butt' + str(nums)
        btn = wx.Button(win, -1, "Exit", pos=(column, row), size=(110, 36))
        btn.Bind(wx.EVT_BUTTON, self.OnClose, btn)


        for pagenum in range(1, 67):
            column = 0
            row = 0
            pge = books[pagenum]
            thispage = pge[:-3]
            win = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
            # win = self.makeColorPanel(wx.WHITE)
            win.SetSize(self.GetBestSize())
            # st.SetForegroundColour(wx.BLACK)
            # self.nb.AddPage(win, thispage)
            self.nb.AddPage(win, thispage)
            numchps = books[pagenum]
            chaps = int(numchps[-3:])
            column = 0
            row = 0
            st = 1

            for nums in range(st, chaps + 1):
                btn = 'butt' + str(nums)
                btn = wx.Button(win, nums, str(nums), pos=(column, row), size=(110, 36))
                btn.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, btn)
                btn.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, btn)
                btn.Bind(wx.EVT_BUTTON, self.OnChapterClick, btn,id = nums)
                column += 150
                if column == 1200:
                    column = 0
                    row += 55
            btn = 'butt' + str(nums)
            btn = wx.Button(win, -1, "Back to Index", pos=(column, row), size=(110, 36))
            btn.Bind(wx.EVT_BUTTON, self.OnIndex, btn)
            column += 150
            if column == 1200:
                column = 0
                row += 55
            btn = 'butt' + str(nums)
            btn = wx.Button(win, -1, "Exit", pos=(column, row), size=(110, 36))
            btn.Bind(wx.EVT_BUTTON, self.OnClose, btn)
            column += 150
            if column == 1200:
                column = 0
                row += 55
        column = 0
        row = 0
        thispage = "Psalms over 75"
        win = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
            # win = self.makeColorPanel(wx.WHITE)
        win.SetSize(self.GetBestSize())
            # st.SetForegroundColour(wx.BLACK)
            # self.nb.AddPage(win, thispage)
        self.nb.AddPage(win, thispage)
        for nums in range(1, 76):
            name = str(nums+75)
            btn = 'butt' + str(nums)
            btn = wx.Button(win, -1, name, pos=(column, row), size=(110, 36))
            btn.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, btn)
            btn.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, btn)
            btn.Bind(wx.EVT_BUTTON, self.OnChapterClick, btn)
            column += 150
            if column == 1200:
                column = 0
                row += 55
            
        btn = 'butt' + str(nums)
        btn = wx.Button(win, -1, "Back to Index", pos=(column, row), size=(110, 36))
        btn.Bind(wx.EVT_BUTTON, self.OnIndex, btn)
        column += 150
        if column == 1200:
            column = 0
            row += 55
        btn = 'butt' + str(nums)
        btn = wx.Button(win, -1, "Exit", pos=(column, row), size=(110, 36))
        btn.Bind(wx.EVT_BUTTON, self.OnClose, btn)
        column += 150
        if column == 1200:
            column = 0
            row += 55

        self.frame.Show()
 
    def OnPageChanged(self, event):
        if self:
            old = event.GetOldSelection()
            new = event.GetSelection()
            sel = self.nb.GetSelection()
            self.log.write('OnPageChanged,  old:%d, new:%d, sel:%d\n' % (old, new, sel))
        event.Skip()
 
    def OnPageChanging(self, event):
        if self:
            old = event.GetOldSelection()
            new = event.GetSelection()
            sel = self.nb.GetSelection()
            self.log.write('OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel))
        event.Skip()

    def OnHighClick(self,event):
        sel = self.nb.SetSelection(67)
        self.log.write('OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel))
        event.Skip()
 
    def OnClick(self, event):
        obj = event.GetEventObject()
        mybutton= event.GetEventObject().GetLabel()
        for finder in range(1,67):
            thisone = books[finder]
            if thisone[:-3] == mybutton:
                print(books[finder])
                mypage = finder
                finder = 67
        sel = self.nb.SetSelection(mypage)
        print("This is the page ", mypage)
        event.Skip()


    def OnChapterClick(self, event):
        obj = event.GetEventObject()
        mybutton= event.GetEventObject().GetLabel()

        print("This is My Button ",mybutton)
        sel = self.nb.GetSelection()
        print ("This is sel in chapter",sel)
        chap =str(sel)
        if chap == "67":
            chap = "19"
        if sel<10:
            chap = "0" + chap
        print(sel)
        
        ch = str(mybutton)
        print ("This is ch ", ch)
        if len(ch) < 2:
            ch = "0" + ch
        if len(ch) <3:
            ch = "0" + ch 
        print("This is ch ",ch)
        cmd = "mpv --no-audio-display /home/norman/Blind/newsue/bi12_" + chap + "__E_" + ch + ".mp3 &"
        print("This would be the command",cmd)
        os.system(cmd)
        event.Skip()


    def OnIndex(self, event):
        obj = event.GetEventObject()
        print("You clicked %s" % obj.GetLabel())
        sel = self.nb.SetSelection(0)
        self.log.write('OnPageChanging, sel:%d\n' % (sel))
        event.Skip()

    def OnClose(self, event):
        self.Destroy()

    def OnEnterWindow(self, event):
        obj = event.GetEventObject()
        sel = self.nb.GetSelection()
        print(sel)
        mybutton= event.GetEventObject().GetId()
        print("This is My Button in Index ",mybutton)
        toplay_book = mybutton*-1 - 2003
        cmd = "mpv --no-audio-display " + book_names[toplay_book] + " &"
        print(cmd)
        os.system(cmd)
        print ("This is toplay ",toplay_book)
        print("You hovered over %s" % obj.GetLabel())
        event.Skip()

    def OnExitWindow(self, event):
        obj = event.GetEventObject()
        print("You hovered over %s" % obj.GetLabel())
        cmd = "killall -9 mpv"
        os.system(cmd)
 
if __name__ == '__main__':
    BibleNB(None)
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