http://qs1969.pair.com?node_id=497953

use Tk; use Tk::Menu; use strict; use MINE::Issues; use DBI; my $sample = shift; my $dbh; if (-e "H:/db/sqlite/$sample"){ $dbh = DBI->connect("dbi:SQLite2:dbname=H:/db/sqlite/$sample", "", + "", { RaiseError => 1, AutoCommit => 0 }); } else { $dbh = DBI->connect("dbi:SQLite2:dbname=H:/db/sqlite/$sample", + "", "", { RaiseError => 1, AutoCommit => 0 }); &create_sampledb($dbh); } my $main = MainWindow->new; my $mb = $main->Menu(-menuitems => &menubar_menuitems() ); $main->configure(-menu => $mb); ## name entry section my $lname = $main->Entry(-text =>'Last Name')->pack; my $fname = $main->Entry(-text =>'First Name')->pack; my $email = $main->Entry(-text =>'email')->pack; my $new_user = $main->Button(-text =>'Add User', -command=>sub{new_use +r($dbh, $lname, $fname, $email)})->pack; ## list users my @userlist; my $user_ref = &user_list($dbh); for (@$user_ref){ push @userlist, "$_->[1], $_->[2] ($_->[0])"; } my $u_list = $main->Listbox()->pack; $u_list->insert('end', @userlist); my $issue_desc = $main->Text(-height=>10, -width=>45)->pack; my $priority = $main->Entry(-text => 'High Medium Low')->pack; my $add_issue = $main->Button(-text=>'Add Issue', -command=>sub{new_is +sue($dbh, $issue_desc, $priority)})->pack; MainLoop; sub new_user { my ($db_ref, $l, $f, $e) = @_; my $ln = $l->get(); my $fn = $f->get(); my $em = $e->get(); add_user($db_ref, $fn, $ln, $em); } sub begin_prog{} sub menubar_menuitems { return [ map ['cascade', $_->[0], -tearoff=> 0, -menuitems => $_->[1]], # make sure you put the parens here because we want to # evaluate and not just store a reference ['~New', &new_menuitems()], ['~Help', &help_menuitems()], ]; } sub new_menuitems { # 'command', tells the menubar that this is not a label for a sub # menu, but a binding to a callback; the alternate here is 'cascade' # Try uncommenting the following code to create an 'Operations' sub # menu in the main 'File' menu. return [ # [qw/cascade Operations -tearoff 0 -menuitems/ => # [ # [qw/command ~Open -accelerator Ctrl-o/, # -command=>[\&OnFileOpen]], # [qw/command ~Save -accelerator Ctrl-s/, # -command=>[\&OnFileSave]], # ] # ], [qw/command ~User -accelerator Ctrl-u/, -command=>[\&OnFileOpen]], [qw/command ~Save -accelerator Ctrl-s/, -command=>[\&OnFileSave]], '', [qw/command E~xit -accelerator Ctrl-q/, -command=>[\&OnExit]], ]; } sub help_menuitems { return [ ['command', 'About', -command => [\&OnAbout]] ]; }