Tkinter-nav
Lightweight navigation wrapper for Tkinter.
Install
pip install tkinter-nav
Usage
Create Some Pages
import tkinter as tk
import tkinter_nav as tknav
class PageOne(tknav.Page):
def __init__(self, parent):
tknav.Page.__init__(self, parent, 'name_of_page')
# Use as any Frame
# Page extends tk.Frame
tk.Button(self, ...).pack()
def page_did_mount(self):
...
def page_did_unmount(self):
...
class PageTwo(tknav.Page):
...
class PageThree(tknav.Page):
...
Create your App
...
class App(tknav.Wrapper):
def __init__(self):
pages = [PageOne, PageTwo]
tknav.Wrapper.__init__(
self,
# Your pages
pages=pages,
# Set inital state, not required
start_state={'foo': 'bar'}
)
# Use as any Tk instance
# tknav.Wrapper extends tk.Tk
self.geometry('200x200')
self.title('My Nav App')
# Show page
self.show_page('page_one')
# Run
if __main__ == '__main__':
App().mainloop()
Pages
Navigate Between Pages
- From the constructor
class PageOne(tknav.Page):
def __init__(self, parent):
...
tk.Button(
command=lambda: self.navigate('page_two')
).pack()
- From a handler function
class PageOne(tknav.Page):
...
def handleClick(self):
self.navigate('page_two')
Mount and Unmount
- page_did_mount: When the page is shown
- page_did_unmount: When the page is hidden
Note: You do not have to use them. They will be defined with a pass statement.
class SomePage(tknav.Page):
...
def page_did_mount(self):
print('Page did mount')
def page_did_unmount(self):
print('Page did unmount')
Note: If you are familiar with React, they share the same role as ComponentDidMount and ComponentDidUnmount.
State
You can set a global state for your app which will enable you to share data between pages.
class App(tknav.Nav):
def __init__(self):
...
self.app_state = {'foo': 'bar'}
class PageOne(tknav.Page):
...
def function(self):
# get a value
print(self.app_state['foo']) #bar
# set a new value
self.app_state['bar'] = 'foo'
When navigate() is called, the local state is merged with the global state.
class PageTwo(tknav.Page):
...
def function(self):
print(self.app_state['bar']) #foo
Note: If you are familiar with React, same principle.
Example
Is this example, we navigated from page_one to page_two to page_one again. The state is printed in page_did_mount() and changed in page_did_unmount().
Metadata
Release files for tkinter-nav 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tkinter-nav-0.0.5.tar.gz | 3.7 kB | Without provenance | Details for tkinter-nav-0.0.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tkinter_nav-0.0.5-py3-none-any.whl | Python 3 | none | any | Details for tkinter_nav-0.0.5-py3-none-any.whl |
Total release size: 12.3 kB
Security for tkinter-nav 0.0.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.