Giter Site home page Giter Site logo

tfpf / scrollablecontainers Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 69 KB

Scrollable containers for Tkinter, wxPython, PyQt5 and PyQt6. Can scroll horizontally as well as vertically, and automatically handle resize events.

Home Page: https://pypi.org/project/ScrollableContainers/

License: GNU General Public License v3.0

Python 100.00%
gui python scroll scrollable tkinter horizontal-scrolling vertical-scrolling just-works wxpython user-interface

scrollablecontainers's Introduction

Scrollable containers which just work!

If you have developed GUI applications, you probably know the pain of designing a clean front-end only to find that your application window is too large for your client's screen. Making the content scrollable is not straightforward (at least in Tkinter). Especially not after you have already written a lot of code to draw the content.

You can use ScrollableContainers to reduce headaches. It's available on PyPI!

pip install ScrollableContainers

Scrollable containers are currently available for the following GUI toolkits.

  • Tkinter
  • wxPython
  • PyQt5
  • PyQt6

This project is not sponsored or endorsed by, or connected with, any organisation or entity such as but not limited to: the Tcl Core Team, the Python Software Foundation, the wxWidgets Team, the wxPython Team, the Qt Company and Riverbank Computing.

Hatch project

lint install build

Tkinter

ScrollableContainers.ScrollableFrameTk: a comprehensive implementation of a scrollable frame, and the flagship class of this project. (I wrote the other classes just for completeness.)

Usage

Add widgets to the frame attribute of a ScrollableFrameTk object. See examples.

Features

  • Handles resize events correctly.
  • Supports scrolling with the mouse wheel and touchpad.
    • Scrolling the mouse wheel or swiping vertically with two fingers on the touchpad triggers a vertical scroll.
    • Scrolling the mouse wheel while holding down Shift or swiping horizontally with two fingers on the touchpad triggers a horizontal scroll.
  • Horizontally centres the contents if the window is wider.

Notes

"<Button-4>", "<Button-5>" and "<MouseWheel>" are bound to all widgets using bind_all to handle mouse wheel scroll events. Do not unbind_all (or bind_all another function to) these three sequences!

wxPython

ScrollableContainers.ScrollablePanelWx: a thin wrapper around wx.lib.scrolledpanel.ScrolledPanel.

Usage

Add widgets to the panel attribute of a ScrollablePanelWx object. See examples.

Features

  • Does everything the wrapped class does.
  • Horizontally centres the contents if the window is wider.

PyQt5/PyQt6

ScrollableContainers.ScrollableAreaQt5/ScrollableContainers.Qt6.ScrollableAreaQt6: a thin wrapper around PyQt5.QtWidgets.QScrollArea/PyQt6.QtWidgets.QScrollArea.

Usage

Add widgets to the area attribute of a ScrollableAreaQt5/ScrollableAreaQt6 object. See examples.

Features

  • Does everything the wrapped class does.
  • Horizontally centres the contents if the window is wider.

In GTK, containers are widgets, so they can be aligned in other containers.

import itertools

import gi; gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

window = Gtk.Window()
window.connect("destroy", Gtk.main_quit)
window.set_default_size(256, 128)

scrolled_window = Gtk.ScrolledWindow()
window.add(scrolled_window)

grid = Gtk.Grid()
grid.set_halign(Gtk.Align.CENTER)
grid.set_row_spacing(20)
grid.set_column_spacing(20)
scrolled_window.add(grid)

dim = 10
for i, j in itertools.product(range(dim), repeat=2):
    label = Gtk.Label()
    label.set_label(f"Label\n({i}, {j})")
    grid.attach(label, j, i, 1, 1)

window.show_all()
Gtk.main()

Since horizontally centring the contents of a scrollable container is the primary function of this package, and GTK has built-in functionality to achieve the same, no submodule for PyGObject is implemented here.

scrollablecontainers's People

Contributors

tfpf avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.