how to create a dialog that is hidden/shown rather than created/destroyed

Liste des GroupesRevenir à cl tcl 
Sujet : how to create a dialog that is hidden/shown rather than created/destroyed
De : mark (at) *nospam* qtrac.eu (Mark Summerfield)
Groupes : comp.lang.tcl
Date : 21. Jun 2024, 10:55:13
Autres entêtes
Message-ID : <RJ-dnawmWOec0-j7nZ2dnZfqnPWdnZ2d@brightview.co.uk>
User-Agent : Pan/0.154 (Izium; 517acf4)
Below is a tiny program.

The "About" form is created and destroyed. So you can click About then
close the About form, then repeat as often as you like.

The "Options" form is supposed to be shown and hidden. But once you click
it and then close it, the entire app is blocked. So clearly I'm doing
something wrong.

Here's the code using Tcl/Tk 9.0b2 on Linux.

#!/usr/bin/env wish9

if {[info exists env(TK_SCALING)]} { tk scaling $env(TK_SCALING) }

proc prepare_modal {form} {
    wm withdraw $form
    wm attributes $form -type dialog
    wm transient $form .
}

proc show_modal {form {focus_widget ""}} {
    wm deiconify $form
    raise $form
    focus $form
    if {$focus_widget ne ""} {
        focus $focus_widget
    }
    catch {grab set $form}
    catch {tkwait visibility $form}
}

variable optionsForm

proc main {} {
    wm title . "Dialog Tests"
    wm minsize . 240 240
    wm attributes . -type dialog
    ttk::button .optionsButton -text Options… -underline 1 \
        -command on_options
    ttk::button .aboutButton -text About -underline 1 -command on_about
    pack .optionsButton -side top
    pack .aboutButton -side top
}

proc on_options {} {
    if {![info exists ::optionsForm]} {
        puts "on_options init"
        set ::optionsForm [toplevel .optionsForm]
        prepare_modal .optionsForm
        wm protocol .optionsForm WM_DELETE_WINDOW {wm
withdraw .optionsForm}
        ttk::label .optionsForm.label -text Options
        pack .optionsForm.label
    }
    puts on_options ;# TODO use show_modal hide/show
    show_modal $::optionsForm ;# TODO give focus widget
}

proc on_about {} {
    toplevel .aboutForm
    prepare_modal .aboutForm
    wm protocol .aboutForm WM_DELETE_WINDOW {destroy .aboutForm}
    ttk::label .aboutForm.label -text About
    pack .aboutForm.label
    show_modal .aboutForm
}

main

Date Sujet#  Auteur
21 Jun 24 * how to create a dialog that is hidden/shown rather than created/destroyed7Mark Summerfield
21 Jun 24 +* Re: how to create a dialog that is hidden/shown rather than created/destroyed2Mark Summerfield
21 Jun 24 i`- Re: how to create a dialog that is hidden/shown rather than created/destroyed1Mark Summerfield
21 Jun 24 +* Re: how to create a dialog that is hidden/shown rather than created/destroyed2Mark Summerfield
21 Jun 24 i`- Re: how to create a dialog that is hidden/shown rather than created/destroyed1Rich
21 Jun 24 `* Re: how to create a dialog that is hidden/shown rather than created/destroyed2Rich
22 Jun 24  `- Re: how to create a dialog that is hidden/shown rather than created/destroyed1Mark Summerfield

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal