Skip to main content

Lightweight navigation wrapper for Tkinter

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tkinter-nav-0.0.5.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

tkinter_nav-0.0.5-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file tkinter-nav-0.0.5.tar.gz.

File metadata

  • Download URL: tkinter-nav-0.0.5.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.2

File hashes

Hashes for tkinter-nav-0.0.5.tar.gz
Algorithm Hash digest
SHA256 915aa476b760d5a4523f21f6800e7c83afc742cb05d0102cf7fa572021cf0276
MD5 02f3adb72703c70bd92887b88382bd27
BLAKE2b-256 246fb13ae48239c041715fbee1d5b97ecd3503ca54530c795d96c7a0d071b3e3

See more details on using hashes here.

File details

Details for the file tkinter_nav-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: tkinter_nav-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.2

File hashes

Hashes for tkinter_nav-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 463a7a4e2454d05df82a624df89e55304f4315a26397efafec08120e9bbf8216
MD5 dbda1201e86252cd6e5b637f0a7fc809
BLAKE2b-256 5aef187abeadd92305fb9f8a375c4cfe358a206ef7481a7238aba83752a97b70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page