Flet-Extended-Interactive-Viewer is a Flet control that provides multiple customization options for displaying two-dimensional content.
Project description
flet-extended-interactive-viewer
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
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.txtorpyproject.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.
💭 Feedback & Contributions
Report bugs or suggest features via GitHub Issues.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flet_extended_interactive_viewer-0.1.2.tar.gz.
File metadata
- Download URL: flet_extended_interactive_viewer-0.1.2.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01e0d347b5ff20a1b36bbbd7c76e5e5a4a97b48adce5ccc726736a2371a4d379
|
|
| MD5 |
0a9296a84be15248decd88547ae86db1
|
|
| BLAKE2b-256 |
bc09a8318f5549abe827123af16fceba37473f028527ce4fbe99f9831171ffce
|
File details
Details for the file flet_extended_interactive_viewer-0.1.2-py3-none-any.whl.
File metadata
- Download URL: flet_extended_interactive_viewer-0.1.2-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0da2f473a1ba0f7d8970b1174bb33b0cfda8a0764e8104a60c0307b36b87d548
|
|
| MD5 |
e5c0e0d70e9240eeea70642f95b5b741
|
|
| BLAKE2b-256 |
d81ec869778857250dfbbe90069c39701b035f5996d58250cf83e3aa75b52290
|