- NAME
- fontchooser — control font selection dialog
- SYNOPSIS
- DESCRIPTION
- tk
fontchooser configure ?-option value
...?
- tk
fontchooser show
- tk
fontchooser hide
- CONFIGURATION OPTIONS
- -parent
- -title
- -font
- -command
- -visible
- VIRTUAL
EVENTS
- <<TkFontchooserVisibility>>
- <<TkFontchooserFontChanged>>
- NOTES
- EXAMPLE
- SEE
ALSO
- KEYWORDS
fontchooser — control font selection dialog
tk fontchooser
configure ?-option value ...?
tk fontchooser
show
tk fontchooser
hide
The tk fontchooser command
controls the Tk font selection dialog. It uses the native platform
font selection dialog where available, or a dialog implemented in
Tcl otherwise.
Unlike most of the other Tk dialog commands, tk fontchooser does not return an
immediate result, as on some platforms (macOS) the standard font
dialog is modeless while on others (Windows) it is modal. To
accommodate this difference, all user interaction with the dialog
will be communicated to the caller via callbacks or virtual
events.
The tk fontchooser command
can have one of the following forms:
- tk fontchooser configure
?-option value ...?
- Set or query one or more of the configurations options below
(analogous to Tk widget configuration).
- tk fontchooser show
- Show the font selection dialog. Depending on the platform, may
return immediately or only once the dialog has been withdrawn.
- tk fontchooser hide
- Hide the font selection dialog if it is visible and cause any
pending tk fontchooser
show command to return.
- -parent
- Specifies/returns the logical parent window of the font
selection dialog (similar to the -parent option to other
dialogs). The font selection dialog is hidden if it is visible when
the parent window is destroyed.
- -title
- Specifies/returns the title of the dialog. Has no effect on
platforms where the font selection dialog does not support
titles.
- -font
- Specifies/returns the font that is currently selected in the
dialog if it is visible, or that will be initially selected when
the dialog is shown (if supported by the platform). Can be set to
the empty string to indicate that no font should be selected. Fonts
can be specified in any form given by the "FONT DESCRIPTION"
section in the font manual
page.
- -command
- Specifies/returns the command prefix to be called when a font
selection has been made by the user. The command prefix is
evaluated at the global level after having the specification of the
selected font appended. On platforms where the font selection
dialog offers the user control of further font attributes (such as
color), additional key/value pairs may be appended before
evaluation. Can be set to the empty string to indicate that no
callback should be invoked. Fonts are specified by a list of form
[3] of the "FONT DESCRIPTION" section in the font manual page (i.e. a list of the
form {family size style ?style ...?}).
- -visible
- Read-only option that returns a boolean indicating whether the
font selection dialog is currently visible. Attempting to set this
option results in an error.
- <<TkFontchooserVisibility>>
- Sent to the dialog parent whenever the visibility of the font
selection dialog changes, both as a result of user action (e.g.
disposing of the dialog via OK/Cancel button or close box) and of
the tk fontchooser
show/hide commands being called. Binding scripts can
determine the current visibility of the dialog by querying the
-visible configuration option.
- <<TkFontchooserFontChanged>>
- Sent to the dialog parent whenever the font selection dialog is
visible and the selected font changes, both as a result of user
action and of the -font configuration option being set.
Binding scripts can determine the currently selected font by
querying the -font configuration option.
Callers should not expect a result from tk fontchooser show and may not
assume that the dialog has been withdrawn or closed when the
command returns. All user interaction with the dialog is
communicated to the caller via the -command callback and the
<<TkFontchooser*>> virtual events. It is
implementation dependent which exact user actions result in the
callback being called resp. the virtual events being sent. Where an
Apply or OK button is present in the dialog, that button will
trigger the -command callback and
<<TkFontchooserFontChanged>> virtual event. On
some implementations other user actions may also have that effect;
on macOS for instance, the standard font selection dialog
immediately reflects all user choices to the caller.
In the presence of multiple widgets intended to be influenced by
the font selection dialog, care needs to be taken to correctly
handle focus changes: the font selected in the dialog should always
match the current font of the widget with the focus, and the
-command callback should only act on the widget with the
focus. The recommended practice is to set font dialog -font
and -command configuration options in per-widget
<FocusIn> handlers (and if necessary to unset them -
i.e. set to the empty string - in corresponding
<FocusOut> handlers). This is particularly important
for implementers of library code using the font selection dialog,
to avoid conflicting with application code that may also want to
use the dialog.
Because the font selection dialog is application-global, in the
presence of multiple interpreters calling tk fontchooser, only the -command
callback set by the interpreter that most recently called
tk fontchooser
configure or tk
fontchooser show will be invoked in response to user
action and only the -parent set by that interpreter will
receive <<TkFontchooser*>> virtual events.
The font dialog implementation may only store (and return)
font actual data as
the value of the -font configuration option. This can be an
issue when -font is set to a named font, if that font is
subsequently changed, the font dialog -font option needs to
be set again to ensure its selected font matches the new value of
the named font.
proc fontchooserDemo {} {
wm title . "Font Chooser Demo"
tk fontchooser configure -parent .
button .b -command fontchooserToggle -takefocus 0
fontchooserVisibility .b
bind . <<TkFontchooserVisibility>> \
[list fontchooserVisibility .b]
foreach w {.t1 .t2} {
text $w -width 20 -height 4 -borderwidth 1 -relief solid
bind $w <FocusIn> [list fontchooserFocus $w]
$w insert end "Text Widget $w"
}
.t1 configure -font {Courier 14}
.t2 configure -font {Times 16}
pack .b .t1 .t2; focus .t1
}
proc fontchooserToggle {} {
tk fontchooser [expr {
[tk fontchooser configure -visible] ?
"hide" : "show"}]
}
proc fontchooserVisibility {w} {
$w configure -text [expr {
[tk fontchooser configure -visible] ?
"Hide Font Dialog" : "Show Font Dialog"}]
}
proc fontchooserFocus {w} {
tk fontchooser configure -font [$w cget -font] \
-command [list fontchooserFontSelection $w]
}
proc fontchooserFontSelection {w font args} {
$w configure -font [font actual $font]
}
fontchooserDemo
font, tk
dialog, font, font selection, font chooser, font panel
Copyright © 2008 Daniel A. Steffen
<das(at)users.sourceforge.net>