Posts: 1,298
Threads: 38
Joined: Sep 2016
Mar-14-2018, 02:07 PM
(This post was last modified: Mar-14-2018, 02:07 PM by sparkz_alot.)
In Python < 3.6 (such as your 3.5)
This (3.6)
print(f"Mp3 file for Leviticus is here: {self.BibleIndex['Old Testament']['Leviticus']['mp3']}") Is equivalent to this (<3.6)
print("Mp3 file for Leviticus is here: {}".format(self.BibleIndex['Old Testament']['Leviticus']['mp3'])) As Larz points out, in either case each instance of the curly brace represents a variable.
If it ain't broke, I just haven't gotten to it yet.
OS: Windows 10, openSuse 42.3, freeBSD 11, Raspian "Stretch"
Python 3.6.5, IDE: PyCharm 2018 Community Edition
Posts: 163
Threads: 13
Joined: Oct 2016
Mar-14-2018, 08:52 PM
(This post was last modified: Mar-14-2018, 09:26 PM by Barrowman.)
Yes that would be great. I just code using gedit. Sorry about your Linux box. I had a disaster with mine about 6 weeks ago.
I was setting up a Raspberry Pi SD card from a backup iso I had. I always have used dd to do that since I got my first Raspberry Pi. I have had 10 so far. That time instead of writing to the SD card I stupidly wrote 4 Gig to the start of my H.D. I usually run a backup of my /home which is on a separate partition each week and had actually left it doing one to my NAS during the night before. So it was easy enough to restore everything.
As for pip its odd. If I ran pip it would install to python 2.7 as that is symlinked to python.
For python 3.5 it's symlinked to python3 so I have to use pip3 for that so it installs it into python 3.5. Now I have python 3.6.4 it's symlinked to python3.6 so I use pip3.6. That is what is currently failing to work.
(Mar-14-2018, 02:07 PM)sparkz_alot Wrote: In Python < 3.6 (such as your 3.5)
This (3.6)
print(f"Mp3 file for Leviticus is here: {self.BibleIndex['Old Testament']['Leviticus']['mp3']}") Is equivalent to this (<3.6)
print("Mp3 file for Leviticus is here: {}".format(self.BibleIndex['Old Testament']['Leviticus']['mp3'])) As Larz points out, in either case each instance of the curly brace represents a variable.
Right now I can see how it works. Thanks.
Posts: 12,039
Threads: 487
Joined: Sep 2016
Mar-14-2018, 10:00 PM
(This post was last modified: Mar-14-2018, 10:00 PM by Larz60+.)
I do have Linux memory sticks, but their slow.
You got it on the code.
I used Linux Mint for quite a while, but it just died on me twice, so I switched to openSuse
and ran with that for several years.
there two things you can do to get correct pip
1st try pip3 install wxpython
if that fails, find your Python3.6 package, pip should be in the Scripts directory use full path to make sure you are running the right version.
Then there's another possible solution:
The reason I asked which IDE you used is that PyCharm, which I use has a very simple package installation manager, which to date (on windows, not sure if it has the same performance on Linux) has not failed me.
To use, you simply click on settings (on the file menu), go to your project Interpreter page, click on the plus sign next to the currently installed packages, and select wxpython. It will make sure that the proper version is installed based on the Interpreter version assigned to the project. It has a sweet interface for creating virtual environment and cloning, pulling and pushing GitHub packages.
I know it's runs on Ubuntu, not sure about mint. Since they have both a commercial and community edition, mint may not support it.
Posts: 12,039
Threads: 487
Joined: Sep 2016
Mar-15-2018, 02:13 PM
(This post was last modified: Mar-15-2018, 02:13 PM by Larz60+.)
I wanted to answer your installation post here.
I'm afraid if answer the actual post then no one else will respond,
but have you tried:
sudo apt-get install wxpython also, see this:https://stackoverflow.com/questions/42816555/trying-to-install-wxpython-phoenix-for-python-3
which may or may not be of help
or google grop: https://groups.google.com/forum/#!forum/wxpython-users
Posts: 12,039
Threads: 487
Joined: Sep 2016
Mar-16-2018, 01:04 AM
(This post was last modified: Mar-16-2018, 10:11 PM by Larz60+.)
Update:
The past few days have been spent testing every process from start to finish, a
painful but necessary step in creating all as a package.
The Github repository has been completely redone, so re-install is necessary. See
below.
The complete GUI shell is working, but is still jsut a shell, without the final steps
needed to display text and play audio files, but all that functionality is in palce
and will be the next few days task.
Git Instructions (skip if git already installed)
for Linux:
1. Make sure you have Git Installed:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git
If you are running red hat linux, replace above with:
sudo yum upgrade
sudo yum install git
2. Clone application:
change directory to place where you want to install software (This will be automatic after package complete)
git clone https://github.com/Larz60p/Barrowman
For OSx:
for windows:
1. Make sure you have Git Installed:
download git here: https://gitforwindows.org/
Install package
Output: Requirements For all Operating Systems:
Install the following packages:
python 3.6
requests
lxml
wxpython
BeautifulSoup4
=====================================================================================
Get the package:
Data directory is created and loaded during ReaddMeOnce .py
This program should not be run more than once, but if it is done by mistake, allow it to complete.
It checks progress and will pick up where it left off.
The Data structure is:
Output: Barrowman/src/data/
KingJames/
All text here
audio/
chapter directories/
mp3 files by chapter
html/
html file cache
json/
IndexedBible.json - Bible dictionary. To get a viewable text version,
run the following command:
cat IndexedBible.json | python -m json.tool > IndexedBible.txt
Various Xref files used for processing
tmp/
temp files
Posts: 163
Threads: 13
Joined: Oct 2016
Sorry been out all day. Just tried this.
python3.6 RunMeOnce.py
Traceback (most recent call last):
File "RunMeOnce.py", line 2, in <module>
import CreateChapterJson
File "/home/norman/experiment/Barrowman/src/CreateChapterJson.py", line 6, in <module>
import GetUrl
File "/home/norman/experiment/Barrowman/src/GetUrl.py", line 20, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
Posts: 12,039
Threads: 487
Joined: Sep 2016
Mar-16-2018, 10:16 PM
(This post was last modified: Mar-16-2018, 10:16 PM by Larz60+.)
Readme.md shows all of the packages that are required to run.
since you have a new python 3.6, they won't be available
here's a copy:
Output: King James Audio Bible for the Blind
Initial setup:
Install following packages:
requests
lxml
wxpython
BeautifulSoup4
To Initialize program, download audio, and bible text:
execute from command prompt (Internet access required):
python RunMeOnce.py
to run application from command prompt (only after one time initialization (above)):
python KJ_BibleApp.py
With many thanks to:
Chapter titles downloaded from The Austin Bible Church:
https://austinbiblechurch.com/sites/default/files/documents/oyttb/Bible_Chapter_Titles.pdf
King James Bible text downloaded from from ebible.orr:
http://ebible.org/kjv/kjvtxt.zip
Audio Files from The King James Bible in mp3 audio downloaded from:
main site: http://www.mp3bible.ca
zip files: http://www.mp3bible.ca/zip/
I'll edit the install post above to include these.
FYI Just about finished with page dictionary modifications to include all
indexes necessary to access various levels of main bible dictionary. With this,
any button press on any notebook page will have immediate access (at the event level)
to any and all keys (that are pertinent to that level).
Posts: 12,039
Threads: 487
Joined: Sep 2016
Mar-17-2018, 07:19 AM
(This post was last modified: Mar-17-2018, 07:20 AM by Larz60+.)
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)
Posts: 12,039
Threads: 487
Joined: Sep 2016
There are some issues with setting proper tab in last posts code. Working on it, quitting for night to watch a movie with my
wife.
Posts: 12,039
Threads: 487
Joined: Sep 2016
Issues have been fixed.
I created a completely new GitHub repository, named barrowman1.
Will merge later, for now, clone from new one.
|