kleines Problem mit eigenen TK Widgets

08/01/2008 - 16:38 von J. Strübig | Report spam
Es ist wirklich interessant was man alles mit Tk entdecken kann. Ich hab
mir jetzt mal ein eigenes Widget konstruiert. Funktioniert auch einwandfrei.

Aber, das Element, dass ich in Popuplate meinem Frame hinzufüge
ignoriert an dieser Stelle die Argumente.
Im folgendem Beispiel zu sehen, das DirTree Objekt hat keinen weissen
Hintergrund. Zumindest hier mit ActivePerl auf Windows XP nicht.

Muss ich das Element woanders erzeugen und wann kann ich es konfigurieren?

Hier ein Beispiel Skript:

#!/usr/bin/perl -w
use strict;
package Dir;

use strict;
use Cwd;

use Tk::DirTree;
use base qw(Tk::Frame);
Construct Tk::Widget 'Dir';

sub Populate {
my ($self, $args) = @_;
$self->SUPER::Populate($args) ;
$self->pack();
my $el = $self->Scrolled('DirTree',
-scrollbars => 'se',
-width => 40,
-bg => '#ffffff',
)->pack(-expand => 1, -fill => 'both');

return $self;
}
package main;

use Tk;
my $top = new MainWindow;

my $x = $top->Dir();

MainLoop;

Struppi.
 

Lesen sie die antworten

#1 Lamprecht
08/01/2008 - 20:29 | Warnen spam
J. Strübig schrieb:

Aber, das Element, dass ich in Popuplate meinem Frame hinzufüge
ignoriert an dieser Stelle die Argumente.
Im folgendem Beispiel zu sehen, das DirTree Objekt hat keinen weissen
Hintergrund. Zumindest hier mit ActivePerl auf Windows XP nicht.

Muss ich das Element woanders erzeugen und wann kann ich es konfigurieren?



Frame zwingt seinen Kindern den -bg auf. Abhilfe wàre z.B.
$self->afterIdle([$el, 'configure', '-bg', 'white'])
(dann ist Frame fertig mit seinen Initialisierungen)
ungetestet...


Christoph


Hier ein Beispiel Skript:

#!/usr/bin/perl -w
use strict;
package Dir;

use strict;
use Cwd;

use Tk::DirTree;
use base qw(Tk::Frame);
Construct Tk::Widget 'Dir';

sub Populate {
my ($self, $args) = @_;
$self->SUPER::Populate($args) ;
$self->pack();
my $el = $self->Scrolled('DirTree',
-scrollbars => 'se',
-width => 40,
-bg => '#ffffff',
)->pack(-expand => 1, -fill => 'both');

return $self;
}
package main;

use Tk;
my $top = new MainWindow;

my $x = $top->Dir();

MainLoop;

Struppi.

Ähnliche fragen