package require zint wm attributes . -fullscreen 1 image create photo ::zintimg pack [::ttk::combobox .c -values [lsort [zint symbologies]] -state readonly] \ -side top -fill x -padx 30 -pady 20 .c set Datamatrix pack [::ttk::entry .e] -side top -fill x -padx 30 -pady 20 .e insert end 12345 bind .e Generate pack [::ttk::button .b -text Generate -command Generate] -fill x -side top \ -padx 30 -pady 20 proc Generate {} { ::zintimg blank ::zintimg configure -width 1 -height 1 ::zintimg blank ::zintimg configure -width 0 -height 0 if {[catch {zint encode [.e get] ::zintimg -barcode [.c get]} e]} { tk_messageBox -message $e -title "Zint error" } else { set w [image width ::zintimg] set h [image height ::zintimg] set lw [winfo width .l] set lh [winfo height .l] set sx [expr {int(1.0 * $lw / $w)}] set sy [expr {int(1.0 * $lh / $h)}] if {$sy < $sx} { set sx $sy } if {$sx <= 0} { set sx [expr {1.1 * $lw / $w}] set sy [expr {1.1 * $lh / $h}] if {$sy < $sx} { set sx $sy } } ::zintimg blank ::zintimg configure -width 1 -height 1 ::zintimg blank ::zintimg configure -width 0 -height 0 catch { zint encode [.e get] ::zintimg -barcode [.c get] -scale $sx } } } pack [label .l -image ::zintimg -bg white] -side top -fill both -expand 1 \ -padx 30 -pady 20 bind .e { after cancel Generate after idle Generate } bind .c <> { after cancel Generate after idle Generate } bind all exit bind all exit bind all exit