This is what I created ScrollableContainers for. Its usage deviates a bit
from standard Tkinter practices in that you add widgets to the frame
attribute of a ScrollableFrameTk instance.’
[1]twitter.abaf4b19.webp
[2]ScrollableContainers
pypi.org
For your use case, you could populate your list box and then put it inside
that frame. Iāve not tested this scenario, so Iād appreciate feedback!
Thanks.’
On 4 Nov 2024, at 21:28, Ulrich Goebel via Python-list
<
python-list@python.org> wrote:
ļ»æHi,
I would like to build a class ScrolledListbox, which can be packed
somewhere in ttk.Frames. What I did is to build not really a scrolled
Listbox but a Frame containing a Listbox and a Scrollbar:
class FrameScrolledListbox(ttk.Frame):
’’’def __init__(self, *args, **kwargs):
’’’’’’’super().__init__(*args, **kwargs)
’’’’’’’#
’’’’’’’# build Listbox and Scrollbar
’’’’’’’self.Listbox = tk.Listbox(self)
’’’’’’’self.Scrollbar = ttk.Scrollbar(self)
’’’’’’’#
’’’’’’’# configure these two
’’’’’’’self.Listbox.config(yscrollcommand=self.Scrollbar.set)
’’’’’’’self.Scrollbar.config(command=self.Listbox.yview)
’’’’’’’#
’’’’’’’# pack them in Frame
’’’’’’’self.Listbox.pack(side=tk.LEFT, fill=tk.BOTH)
’’’’’’’self.Scrollbar.pack(side=tk.RIGHT, fill=tk.BOTH)
That works, so instances of FrameScrolledListbox can be packed and the
tk.Listbox itself is accessible via an attribute:
frmScrolledListbox = FrameScrolledListbox(main)
frmScrolledListbox.Listbox.config(...)
But it would be a bit nicer to get a class like
class ScrolledListbox(tk.Listbox):
’’’...
So it would be used that way:
scrolledListbox = ScrolledListbox(main)
scrolledListbox.config(...)
Is that possible? The problem which I can't handle is to handle the
Frame which seems to be needed to place the Scrollbar somewhere.
Best regards
Ulrich
--
Ulrich Goebel <
ml@fam-goebel.de>
--
https://mail.python.org/mailman/listinfo/python-list
References
Visible links
1.
https://pypi.org/project/ScrollableContainers/
2.
https://pypi.org/project/ScrollableContainers/
--- MBSE BBS v1.0.8.4 (Linux-x86_64)
* Origin: ---:- FTN<->UseNet Gate -:--- (3:633/280.2@fidonet)