Skip to main content

Scrollable containers for Tkinter, wxPython, PyQt5 and PyQt6

Project description

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

No part of the code in this repository has been written by or in consultation with artificial intelligence chatbots such as (but not limited to) Bard and ChatGPT.

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

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.
  • Reserves all space in the window for child widgets.
    • The scrollbars do not take up any space. When scrolling or moving the cursor in the window, they are shown briefly, and then hidden.

Demo

ScrollableFrameTk_demo

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.

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

scrollablecontainers-2.2.3.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

scrollablecontainers-2.2.3-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file scrollablecontainers-2.2.3.tar.gz.

File metadata

File hashes

Hashes for scrollablecontainers-2.2.3.tar.gz
Algorithm Hash digest
SHA256 e77d7c8a8c21f1864a3b6318c092cd91d36d8b8b4550c98f6e02a07c7bf08dc9
MD5 e6284460657780c7ba7b142bdbe6edd0
BLAKE2b-256 b6d229ab625c88a94fea9265c2d4bf61ef7b4fb817200f277e39d77df98f19a2

See more details on using hashes here.

File details

Details for the file scrollablecontainers-2.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for scrollablecontainers-2.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e3e37dacfef5919d0d3b7585c21fe253c690ce2946a83eda7641159be37e28ce
MD5 4f1db20cd06450d59cf7967d6908c725
BLAKE2b-256 a7d80c27c919bd34ab081c89f8d418bb46e072fe57220f8c5e0c081c18c0f3a0

See more details on using hashes here.

Supported by

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