moving from tkinter to wxpython - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html) +--- Thread: moving from tkinter to wxpython (/thread-8405.html) |
RE: moving from tkinter to wxpython - sparkz_alot - Mar-14-2018 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. RE: moving from tkinter to wxpython - Barrowman - Mar-14-2018 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) Right now I can see how it works. Thanks. RE: moving from tkinter to wxpython - Larz60+ - Mar-14-2018 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. RE: moving from tkinter to wxpython - Larz60+ - Mar-15-2018 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 wxpythonalso, 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 RE: moving from tkinter to wxpython - Larz60+ - Mar-16-2018 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 =====================================================================================Get the package:
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:
RE: moving from tkinter to wxpython - Barrowman - Mar-16-2018 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' RE: moving from tkinter to wxpython - Larz60+ - Mar-16-2018 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: 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). RE: moving from tkinter to wxpython - Larz60+ - Mar-17-2018 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) RE: moving from tkinter to wxpython - Larz60+ - Mar-19-2018 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. RE: moving from tkinter to wxpython - Larz60+ - Mar-20-2018 Issues have been fixed. I created a completely new GitHub repository, named barrowman1. Will merge later, for now, clone from new one. |