What: BWidget Where: https://sourceforge.net/projects/tcllib/files/BWidget/ (download) https://core.tcl-lang.org/bwidget/ (issue tracker and source code) Description: High-level widget set for Tcl/Tk using native Tcl 8.x namespaces. Contains over 20 widgets, such as progress bars, main frames, generic scrolled widget, paned windows, button boxes, notebooks, combo boxes, spin boxes, tree widgets, font and color selection widgets, balloon help, and more. Original written by Eric Boudallier (cudos, great design) Currently at version 1.10.1 . Updated: 2024-10-27 Contact: https://core.tcl-lang.org/bwidget/
BWidget is a Tcl/Tk script-only set of megawidgets designed to provide the developer additional tools.
It is currently being maintained as a part of the tcllib http://tcllib.sf.net/ source code repository. BWidget Reference Manual (HTML documentation) can be found at http://tcllib.sourceforge.net/BWman/contents.html , as well on freshmeat (but that had out of date info there. aku asked to transfer the freshmeat entry to himself and updated the entry to match the current release, available on sf.net.)
Application examples using BWidget: ased. portmon, windows registry browser, DOM related megawidgets, kitten, Tcl Xchange's NetCVS mirror, ramdebugger
Zebulon: BWidget Manual with Screenshots
LV 2008 Mar 25
So, has BWidget been enhanced to take advantage of Ttk when available?
Has there really not been a BWidget release since 2006?
HaO Bugfix release in 2009-07-24 - see [L1 ]. JOB is currently working on a ttk-enabled version.
Has anyone converted the BWidget html reference pages into either doctools or nroff -man formats?
HaO AFAIK - nobody, sorry.
JOB BWidget revitalization:
A modified version for the BWidget toolkit to take advantage of ttk is now available in CVS.
The programming interface of BWidget::use has changed:
# BWidget::use # Argument usage: # -package ttk # | # specify a package name to be initialized, currently # support for the following packages is implemented: # ttk ... try to use tile'd widget set (if available) # # -style default / native / myFavoriteStyleName # | | | # | | specify a valid style name, # | | use "BWidget::_get_colordcls" which gives # | | you a list of what's avaliable for tk # | | # | if specified, BW tries to emulate OS color scheme, # | a specific color schema associated to each individual # | operation system is going to be used # | # same behaviour as before, stay compatible # with previous releases # # -setoptdb [no=default|0|yes|1] # | # maintain the option database # if you need a dynamic behavior when changing # the underlying style, activate this option! # # -themedirs {} = default / a list of valid directory names, # to specifying additional ttk theme packages
With the modified package (available in CVS) I could get a reasonable good result e.g. for ased3.0b16.vfs by just adding this to the existing code (and copying the requ. theme package to ased.../lib , beside this with no other change!):
package require BWidget BWidget::use \ -package ttk -style winxpblue -setoptdb 1
The result looks like:
Comments are welcome!
HaO 2010-06-18 ActiveState has distributed the unreleased BWidget 1.9.1 which contains extended themed support with ActiveTcl 8.4.19.4, 8.5.8.2 and 8.6.0.0b3.
There are some incompatibilities in color selection to former BWidgets. A 1.9.2 release followed which is 1.9.0 with some minor bug fixes. Andreas wrote me, that BWidget 1.9.2 is now installable via Teapot. Anybody experiencing compatibility issues is asked to install this release.
Anybody wanting to use Tile and does not need this compatibility may try to use the 1.9.1 in ActiveState or the current trunk from the Tcllib CVS . This is work in progress.
Mho With version 1.9.1 in Tile mode I see that buttons disappear after they are initially drawn correctly and later activated. The text of the button remains intact. Maybe I have to change more than just specifying BWidget::use -package ttk...:
Only if the mouse pointer is over the button, the relief and border are visible again, but with a different style... See BWidget with tile for a code fragment.
HaO: Sorry, for sure a bug or an unfinished feature. Eventually JOB may write more.
MHo: The BWidget demo coming with ActiveState 8.4.19.4 does not work anymore.
HaO: Does it work with BWidget 1.9.2 for you ?
HaO: There are currently two versions of BWidget in the CVS:
A checkout command for the version with the sticky tag bwidget:
cvs -z3 -d:ext:[email protected]:/cvsroot/tcllib checkout -P -r bwidget bwidget
or use the tarball button at the end of [L2 ].
I am migrating my own applications to ttk now. There is practically no BWidget widget, which is not replaced by a ttk widget. There are mostly details missing which must be added by additional packets like balloon help (tklib) and drag and drop (tkdnd).
I did not use the work of Johann, because tile is emulated by switching colors. This works well on most Unix platforms but does not bring the complete different look of native windows (and MacOS) widgets. We discussed on that and this approach seams not to be possible. Even a simple ttk::frame may contain a structured bitmap surface which may not be emulated by one color.
I updated the classic BWidget (sticky tag "BWidget" in the repository) within this process. There are tile versions of some widgets which mostly do not support as many options as the normal ones. This is for migration purposes. I would not use it for new projects.
To enable themed mode, use:
Widget::theme 1
Here is the state and thoughts about some widgets:
Former release has introduced an update bug of multiple nodes in the tree widget, which is fixed here.
MHo 2010-12-16:
HaO sorry, corrected (also on teapot)
HaO What are you doing exactly ? This is correct, this option does not exist any more in themed mode (RTFM?).
HaO The only change between 1.9.3 and 1.9.4 is a listbox bugfix, right.
HaO 2011-08-23 clt contribution by Kevin Walzer on Use BWidget for new projects:
> As I stated on wiki.tcl.tk/bwidget , I would not recomment using > BWidget for new projects if you target ttk (what you should IMHO).
I'd disagree with this. BWidget is still quite useful in certain contexts. Its tree widget is more configurable than the ttk treeview, and the listbox is also more flexible, and yet it is simpler to program against than tktreectrl. Its notebook widget also offers more flexibility than the ttk notebook.
I think the best strategy to use with BWidget is as a supplement--a very powerful one--to the core and ttk widgets. Perhaps you wouldn't want to do an entire project in BWidget, but I find it indispensible and I am grateful that Harald continues to maintain it. That's why I've also contributed some patches to the project and helped test Harald's updates on the Mac.
In case you're curious how I use it, take a look at this screenshot:
http://www.codebykevin.com/packetstream-running.png
The tree widget on the left, styled to emulate a Mac "source list" widget, is a BWidget tree. Doesn't look like the standard BWidget tree in the demos with the Windows-2000-era appearance, but that's the point--these changes are trivial to make. Doing this in tktreectrl would give me a migraine, and I'm not aware that the ttk treeview can be configured to this extent.
HaO 2011-03-22: The following thread gives valueable input by Martyn Smith and Koen Dankaert:
http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/afa34a966e4bbe83#
This is also a reminder (for me) that there is action pending.
The 4 bug-fixes of this year are included in this release:
2013-01-14: Thanks to Roy Keene, the repository of the source code moved to https://core.tcl.tk/bwidget/home
New features of 1.9.7:
2013-10-15: Wolfgang S. Kechel wrote about BWidget ComboBox (which now has themed colors (1.9.8)):
ttk::combobox is not a replacement for BWidget::ComboBox as it does not support images.
New features of 1.9.8:
HaO 2015-10-06: I was asked how to update bwidget on fossil. Well, the current development is in branch bwidget.
Here is my recipe:
cd test mkdir repo cd repo fossil clone http://adrianmedranocalvo:[email protected]/bwidget bwidget.fossil
fossil ui bwidget.fossil -> Admin->Settings->autosync
(no login etc, this works automatically)
cd c:/test mkdir checkout cd checkout fossil open ../repo/bwidget.fossil bwidget
fossil diff --tk
fossil commit -> Enter comment, use [xxxxx] to reference tickets
fossil ui
fossil sync
This is the release comming with TCL8.6.5, TCL8.5.19. The enhancements are:
The lang file encoding change increases portability when the system encoding is not an iso-latin derivate. Due to that, the update is recommended. This Tk Ticket 0a3d799a6d tells the whole story.
Bugfix release. See readme for details.
---
Two new features:
---
small maintenance:
---
small maintenance:
---
This is sort of a hack and does not comply to the quality of BWidget. Eric may forgive me. Nevertheless, it was helpful for me to have the same Menu on AndroWish and PC program.
Here is the sketch:
# Menu # The first level is empty to have items like commands or checkboxes at the top level. set menuItems [list "" {} {} 0\ [list command &ExampleLabel {} "Press me" "" -command ShowMe]] # Create MainFrame with empty menu if {$fAndroid} {set TopMenu ""} else { set TopMenu $menuItems } MainFrame .fm -separator none -menu $TopMenu pack .fm -fill both -expand yes set clientFrame [.fm getframe] # Menue bar frame pack [ttk::frame $clientFrame.mf] -side bottom -fill x if {$fAndroid} { ttk::menubutton $clientFrame.m MainFrame::_create_menubar .fm $menuItems $clientFrame.m pack $clientFrame.m -in $clientFrame.mf raise $clientFrame.m $clientFrame.mf }
scrollutil has a remarkable widget scrollutil::scrollableframe which may be used with small changes as a replacement of BWidget ScrolledFrame. Advantages are the support of the scrollwheel and the use of replacement of the internal canvas widget by a dynamic process placing the widgets.
The documentation contains a comparison table at the end of: [L3 ].
Here is my recipt to replace it in the case of a vertically scrolled property-page like widget:
From:
set PScroll [ScrolledWindow $Path.s -auto vertical -scrollbar vertical] pack $PScroll -side top -fill both -expand true set PScrollable [ScrollableFrame $Path.f -constrainedwidth 1] $PScroll setwidget $PScrollable set PPage [$PScrollable getframe]
to:
set PScroll [scrollutil::scrollarea $Path.s -xscrollbarmode none] pack $PScroll -side top -fill both -expand true set PScrollable [scrollutil::scrollableframe $PScroll.f -fitcontentwidth 1] $PScroll setwidget $PScrollable scrollutil::enableScrollingByWheel $PScrollable set PPage [$PScrollable contentframe]
---
Thanks to Brian's implementation of <TkWorldChange> in Tk, it is now possible, to resize notebook tabs and the status bar on named font size change. That is the only change.
I only tested on Windows. Windows does not resize menus. If there are issues on other platforms with Menu resize, please come back to me.
Bugfix: Prevent multiple drops, when movement while drop is processed.
Changes:
Bugfix: