The [https://aplsimple.github.io/en/tcl/pave/index.html%|%apave v3.2.7%|%] package provides a sort of geometry manager for Tcl/Tk. The ''apave'' isn't designed to replace the existing Tk geometry managers (''place, pack, grid''). Rather the ''pave'' tries to simplify the window layout by using their best, by means of: * joining the power of ''grid'' and ''pack'' * uniting the creation of widgets with their layout (and mostly their configuration) * minimizing a coder's efforts at creating / modifying / removing widgets * setting a natural tab order of widgets * theming both ttk and non-ttk widgets * centralizing things like icons or popup menus * providing ''mega-attributes'', right up to the user-defined ones * providing ''mega-widgets'' The ''apave'' is implemented as ''APave'' oo::class, so that you can enhance it with your own inherited / mixin-ed class. While ''APave'' oo::class allows to layout highly sophisticated windows, you can also employ its more 'earthy' descendants: ''APaveDialog'' and ''APaveInput'' allow you: * to call a variety of dialogs, optionally using a "Don't show again" checkbox and a tagged text * to use a variety of widgets in dialogs, with entry, text, combobox, file content combobox, spinbox, listbox, file listbox, tablelist, option cascade, checkbutton, radiobutton, label, title label * to resize windows neatly (however strange, not done in Tk standard dialogs) The theming facility of ''apave'' is enabled by ''ObjectTheming'' oo::class which embraces both ttk and non-ttk widgets. Along with standard widgets, the mentioned ''apave'' classes provide a batch of following ''mega-widgets'': * file picker * saved file picker * directory picker * font picker * color picker * date picker * menubar * toolbar * statusbar * file combobox * file listbox * file viewer/editor * option cascade * e_menu * bartabs * link * baltip * gutter At last, a stand-alone dialog allows not only to ask "OK/Cancel" or "Yes/No" returning 1/0 but also to set environment variables to use in shell scripts. The ''apave'' originates from the old ''pave'' package, to comply with [https://wiki.tcl-lang.org/page/How+to+build+good+packages%|%How to build good packages%|%] ("avoid simple, obvious names for your namespace"). Let it be a sort of ''a-pave''. ** ** '''Further details:''' [https://aplsimple.github.io/en/tcl/pave/index.html%|%Description%|%] [https://aplsimple.github.io/en/tcl/pave/apave.html%|%Reference%|%] ** ** '''Download link:''' [https://chiselapp.com/user/aplsimple/repository/pave/download%|%pave.zip%|%] ** ** '''Gallery of demos:''' [https://github.com/aplsimple/pave/releases/download/apave-3.2.7/apave.3.2.7.mp4%|%Overview of apave%|%] [https://github.com/aplsimple/pave/releases/download/apave-theming.3.2.5/apave-theming.3.2.5.mp4%|%Theming in apave%|%] [https://github.com/aplsimple/pave/releases/download/apave-links.3.2.7/apave-links.3.2.7.mp4%|%Links in apave%|%] [https://github.com/aplsimple/pave/releases/download/apave-dialogs.3.2.7/apave-dialogs.3.2.7.mp4%|%Dialogues in apave%|%] ** ** Below are some screenshots, just to give a glance at this stuff. ** ** [https://aplsimple.github.io/en/tcl/pave/files/findreplace.jpg%|%PaveMe example%|%] ''Figure 1. PaveMe example described line by line in https://aplsimple.github.io/en/tcl/pave/index.html#example_Pave '' ** ** [https://aplsimple.github.io/en/tcl/pave/files/test2.png%|%test2_pave.tcl demo%|%] ''Figure 2. Screenshot of test (test2_pave.tcl)''. ** ** [https://aplsimple.github.io/en/tcl/pave/files/test2t.png%|%test2_pave.tcl demo themed%|%] ''Figure 3. The same as above, just themed''. ** ** [https://aplsimple.github.io/en/tcl/pave/files/test2nt.png%|%test2_pave.tcl demo themed%|%] ''Figure 4. Themed non-ttk widgets''. ** ** ---- [Jeff Smith] 2021-01-21 : Below is an online demo using [CloudTk]. This demo runs "Pave, sort of geometry manager" in an Alpine Linux Docker Container. It is a 28.4MB image which is made up of Alpine Linux + tclkit + Pave-sort-of-geometry-manager.kit + libx11 + libxft + fontconfig + ttf-linux-libertine. It is run under a user account in the Container. The Container is restrictive with permissions for "Other" removed for "execute" and "read" for certain directories. [Jeff Smith] Without looking at the code this demo appears to disconnect at times. I think it maybe because when changes occur the Tk app gets "Restarted" and [CloudTk] disconnects the session if the Tk app disappears. <> <> <> GUI | Dialog | Widget