Schrift
[thread]5085[/thread]

Perl/Tk mit Menü-Widget eine Passwortabfrage???

Leser: 1


<< >> 5 Einträge, 1 Seite
renee
 2005-09-13 14:27
#44606 #44606
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es wäre geschickter, wenn Du Dir ein Toplevel-Widget zur Passwort-Abfrage erstellst und bei jedem Menüpunkt, bei dem eine Passwortabfrage notwendig ist, ein Objekt des Widgets erzeugen und bei korrektem Passwort weitermachst!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-09-15 17:25
#44607 #44607
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mein Vorschlag:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package My::UserPassword;

use strict;
use warnings;
use Carp;

require Tk;
require Tk::Toplevel;
require Exporter;

our @ISA = qw(Exporter);
our $VERSION = '0.01';
our @list = ();

sub Show{
my ($self) = @_;
my $cw = $self->{cw};
$cw->Popup();
$cw->waitVariable(\$cw->{Selected});
$cw->withdraw;
$cw->{Selected} = [""] unless(defined $cw->{Selected});
return wantarray ? @{$cw->{Selected}} : join("; ",@{$cw->{Selected}});
}# Show

sub Accept{
my ($cw) = @_;
my $user = $cw->Subwidget('user_frame')->Subwidget('user')->get();
my $pass = $cw->Subwidget('password_frame')->Subwidget('password')->get();
$cw->{Selected} = [$user,$pass];
$cw->{Selected} = [""] unless($user && $pass);
}# Accept

sub Cancel{
my ($cw) = @_;
$cw->{Selected} = undef;
$cw->withdraw;
}#Cancel

sub new{
my ($class,$cw,%args) = @_;
my $self = {};
bless($self,$class);

my $top = $cw->Toplevel(%args);
$top->protocol('WM_DELETE_WINDOW' => [\&Cancel, $top]);

# User Frame
my $entry_var = '';
my $user_frm = $top->Component('Frame' => 'user_frame')->pack(-expand => 1, -fill => 'both');
$user_frm->Label(-text => 'User: ')->pack(-anchor => 'w',
-side => 'left',);
$user_frm->Component('Entry' => 'user',
-textvariable => \$entry_var,
)->pack(-anchor => 'e',
-side => 'right',);

# Password Frame
my $password_var = '';
my $pass_frm = $top->Component('Frame' => 'password_frame')->pack(-expand => 1, -fill => 'both');
$pass_frm->Label(-text => 'Password: ')->pack(-anchor => 'w',
-side => 'left',);
$pass_frm->Component('Entry' => 'password',
-textvariable => \$password_var,
-show => '*',
)->pack(-anchor => 'e',
-side => 'right',);

# ok-Button
$top->Button(-text => 'ok', -command => [\&Accept,$top])->pack();

$self->{cw} = $top;
return $self;
}# Populate

1;


Im Skript dann:
Code: (dl )
1
2
3
my $passwordwidget = My::UserPassword->new($manwindow,%args);
my ($user,$passwd) = $passwordwidget->Show();
print "User:\t\t$user\nPassword:\t$passwd\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Weman
 2005-09-13 14:12
#44608 #44608
User since
2005-08-10
17 Artikel
BenutzerIn
[default_avatar]
Hallo alle,

ich habe mir mit dem Menü-Widget ein Menü gebastelt. Jetzt will bei bestimmten Punkten noch im Menü eine Passwortabfrage starten lassen und nur wenn das Passwort stimmt die Funktion ausführen lassen.

Will das Passwort im Menü haben, damit ich mir Platz sparen kann!

Vielen lieben Dank

Weman
DocJunioR
 2005-09-15 16:46
#44609 #44609
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
also ich hab mir da mals sowas gebastelt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use strict;
use warnings;

use Tk;
use Tk::DialogBox;
use Tk::LabEntry;

use prj::cfile;

package prj::login;

sub new
{
my $this = shift;
my $thisref = ref($this) || $this;
my $self;
$self->{'parent'} = $_[0];
$self->{'username'} = "";
$self->{'password'} = "";

# create Login-Dialog
$self->{'window'} = $self->{'parent'}->DialogBox(-title =>'Login', -default_button => 'OK', -buttons => ['OK', 'Abbrechen'] );

$self->{window}->add('LabEntry', -textvariable => \$self->{'username'}, -width => 20,


label => 'Benutzer')->pack(-side =>"top");


$self->{window}->add('LabEntry', -textvariable => \$self->{'password'}, -width => 20,


label => 'Passwort', -show =>'*')->pack(-side =>"top");

bless ($self, $thisref);
return $self;
}

sub getpass
{
my $self = shift;

my @heads = ('id', 'name', 'pass', 'grants', 'local', 'server');
my $userdb = prj::cfile->new(@heads, 'dat\\users.dat');

my $result = $self->{'window'}->Show();
$self->{'window'}->bind("<Return>", sub{$result = 'OK';});
$self->{'window'}->bind("<Escape>", sub{print "abbruch!\n"; $result = 'Abbrechen';});

if ('OK' eq $result)
{
my %find = ( 'name' => $self->{'username'}, 'pass' => $self->{'password'});

my @datarray = @{$userdb->get(\%find)};

my %data = %{$datarray[0]};

if (@datarray == 1)
{

return \%data;
}
}

return 0;
}
return 1;


die cfile ist eine Klasse, die mir den Datenzugriff erleichtert. Die kann ich leider nicht so ohne weiteres rausgeben :( Hier weiter zu arbeiten sollte aber kein problem sein
Crian
 2005-09-20 19:45
#44610 #44610
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
...ich verschieb das mal ins GUI-Forum...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 5 Einträge, 1 Seite



View all threads created 2005-09-13 14:27.