Skip to main content

Flet-Extended-Interactive-Viewer is a Flet control that provides multiple customization options for displaying two-dimensional content.

Project description

flet-extended-interactive-viewer

PyPI version Python Flet License

Flet-Extended-Interactive-Viewer is a Flet control that provides multiple customization options for displaying two-dimensional content.

🌟 Highlights

  • XY Scrollbars: Synchronized scrollbars for the InteractiveViewer.
  • XY Scrollbar Options: Easy to customize the experience e.g. you can disable the interaction with the scrollbars or disable Y scrollbars.
  • Panning: Supports panning like ft.InteractiveViewer, with synchronized scrollbars. You can also disable panning to use only the scrollbars.
  • Zoom: Zoom with the mouse/touchpad or via a function call. When zooming via a function call, the zoom can be limited to the content size.
  • Transformation data: Provides access to the transformation applied to the content.

ℹ️ Overview

This extension was developed as part of a Bachelor Thesis, supervised by Erik Kubaczka at the Self-Organizing Systems Lab of the Technical University Darmstadt. FletExtendedInteractiveViewer is a powerful control for Flet which enables the user to customize an interactive content view experience.

📖 Documentation

Documentation to this package can be found here.

🚀 Example

Demo

Example

Code

import flet as ft

from flet_extended_interactive_viewer import FletExtendedInteractiveViewer


def main(page: ft.Page):
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
    text = ft.Text("MOVE ME",size=50)

    def on_click(ex:FletExtendedInteractiveViewer=None,text_move:ft.Text=None):
        if ex.pan_enabled:
            ex.pan_enabled = False
            text_move.value = "PAN DISABLED"
        else:
            ex.pan_enabled = True
            text_move.value = "MOVE ME"
        ex.update()
        text_move.update()

    def get_transformation_click(ex:FletExtendedInteractiveViewer=None,text_update:ft.Text=None):
        x, y, scale = ex.get_transformation_data()
        text_update.value = f"offset_x={round(x)}, offset_y={round(y)}, scale={scale}"
        text_update.update()
    def toggle_scroll_x(ex:FletExtendedInteractiveViewer=None):
        ex.x_scroll_enabled = not ex.x_scroll_enabled
        ex.update()
    def toggle_scroll_y(ex: FletExtendedInteractiveViewer = None):
        ex.y_scroll_enabled = not ex.y_scroll_enabled
        ex.update()

    def toggle_interactive(ex: FletExtendedInteractiveViewer = None):
        ex.interactive_scroll_enabled = not ex.interactive_scroll_enabled
        ex.update()
        
    extended = FletExtendedInteractiveViewer(
                    content=ft.Container(text,width=900,height=800,gradient=ft.LinearGradient(
                        begin=ft.alignment.top_left,
                        end=ft.alignment.bottom_right,
                        colors=[ft.Colors.PINK, ft.Colors.ORANGE_700],
                    )),
                    width=400, height=250,constrained=False,pan_enabled=True,over_zoom_enabled=False,
                )
    
    text_x_y_scale = ft.Text("offset_x=?, offset_y=?, scale=?")
    page.add(ft.Row([
        ft.Column([text_x_y_scale,
                extended,
                   ft.Row([ft.Button("toggle pan",on_click=lambda e,ex=extended,text_move=text:on_click(ex,text_move)),ft.Button("toggle interactive_scroll_bar",on_click=lambda e,ex=extended:toggle_interactive(ex))]),ft.Row([ft.Button("toggle scroll_bar_x",on_click=lambda e,ex=extended:toggle_scroll_x(ex)),ft.Button("toggle scroll_bar_y",on_click=lambda e,ex=extended:toggle_scroll_y(ex))]),
                   ft.Row([ft.Button("reset",on_click=lambda e,ex=extended:ex.reset(400)),ft.Button("zoom in",on_click=lambda e,ex=extended:ex.zoom(1.25)),ft.Button("zoom out",on_click=lambda e,ex=extended:ex.zoom(0.75))]),
                   ft.Row([ft.Button("get_transformation",on_click=lambda e, ex=extended, x_y_scale=text_x_y_scale: get_transformation_click(ex,text_x_y_scale)),ft.Button("set_transformation(-100.0,-100.0,1.0)",on_click=lambda e,ex=extended:ex.set_transformation_data(offset_x=-100.0,offset_y=-100.0,scale=1.0))])
                   ],alignment=ft.MainAxisAlignment.CENTER)],alignment=ft.MainAxisAlignment.CENTER),

    )


ft.app(main)

⬇️ Installation

To install the flet-extended-interactive-viewer package:

  • Using pip:

    pip install flet-extended-interactive-viewer
    

    After this, you will have to manually add this package to your requirements.txt or pyproject.toml.

Build your app:

  • Using Linux:

    flet build linux -v
    
  • Using Mac:

    flet build macos -v
    
  • Using Windows:

    flet build windows -v
    

📝 License

This project is licensed under the MIT license – see the LICENSE file for details.

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

flet_extended_interactive_viewer-0.1.0.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file flet_extended_interactive_viewer-0.1.0.tar.gz.

File metadata

File hashes

Hashes for flet_extended_interactive_viewer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4db6722afe9e1b3cd766389492d22a88e72878cb0a14b11dbede3ccda5cd7bb5
MD5 6cf44d72a0c74ddc5efb6b3b0a129fb7
BLAKE2b-256 612a84a00506c98e92e7974e457b746a6ae562e04c940e88c402a5e9748ea067

See more details on using hashes here.

File details

Details for the file flet_extended_interactive_viewer-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for flet_extended_interactive_viewer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b088c3cbb1bdb5248a1f6479902e2834a11368824b2fd82eaee1faf2b43bbf4e
MD5 6612fb1816e19cbf918a562b8902e62b
BLAKE2b-256 b501e472da4b1f0108898281a343461a35867b40cc0500f2a78900696bba9164

See more details on using hashes here.

Supported by

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