Re: TK setPalette Not working under Linux Gnome
by zentara (Cardinal) on Jun 24, 2007 at 12:53 UTC
|
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $types = [['Format Perl', '.pl']];
my $mw = new MainWindow ( ) ;
$mw->setPalette(background=>'black', foreground=>'white');
my @files;
$mw -> Button ( -text => 'Select File ' ,
-command => \&open_it
)-> pack(-padx=>5, -pady=>5) ;
MainLoop ( ) ;
sub open_it {
my $names = $mw ->getOpenFile (
-initialdir => '.',
-filetypes => $types,
-multiple => 1) ;
foreach my $file( @{$names} ){
print "Result ", $file, "\n" ;
}
}
| [reply] [d/l] |
|
|
Yeah, it works, but only under FVWM or plain X. I guess ICEWM falls under these. I tried it under KDE and Gnome... doesn't work. I think the window manager somehow overrides the palette colors. I am not sure, and very confused. In fact I don't know what I must do next. My application is quite large, and I don't feel like changing all Frames, top levels, etc. to have an option for background and foreground ...
I know that you can recursively change all children's background for instance. But not all my windows are loaded... I load them dynamically. My application works fine in FVWM.
I would appreciate any input.
Thanks Zentara.
| [reply] |
Re: TK setPalette Not working under Linux Gnome
by zentara (Cardinal) on Jun 25, 2007 at 12:13 UTC
|
You might be better off using optionAdd, instead of setPallette, but you may need to set the optionAdd for all toplevel windows. This works, but looks a bit different (better in my opinion)
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $types = [['Format Perl', '.pl']];
my $mw = new MainWindow ( ) ;
$mw->optionAdd('*foreground' => 'white');
$mw->optionAdd('*background' => 'black');
#$mw->setPalette(background=>'black',foreground=>'white');
my @files;
$mw -> Button ( -text => 'Select File ' ,
-command => \&open_it
)-> pack(-padx=>5, -pady=>5) ;
MainLoop ( ) ;
sub open_it {
my $names = $mw ->getOpenFile (
-initialdir => '.',
-filetypes => $types,
-multiple => 1) ;
foreach my $file( @{$names} ){
print "Result ", $file, "\n" ;
}
}
| [reply] [d/l] |
|
|
Hi Zentara,
You are right. This works like a bomb!
I am very happy! Thanks a lot for the solution. Your help is highly appreciated! I will list you in my About section :)
The software I am developing has a small site here: http://www.wtspace.com/spacepos/
| [reply] |
|
|
The POS system looks very professional.
| [reply] |
|
|
Just last question. I noticed that the elements such as Canvas and Scale has got a white border around it. Button, Label funny enough doesn't have it. Let me know if you need a screenshot, please. I think it is just another option, but I can't figure out the name. I tried all border related ones... but no luck. Thanks for your great help!
| [reply] |
|
|
The optionAdd mechanism isn't fully foolproof. You may have to manually add the options to each widget. Each widget will act a bit differently. You might also want to ask on comp.lang.perl.tk, where someone else may know a useful trick or two. As you can see below, the highlightthickness only works on a per widget basis. It may be a bit late now, but Gtk2 has better uniformity of control over all widget parameters, in Tk, each widget has a distinct personality.
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $mw = tkinit;
$mw->optionAdd('*foreground' => 'yellow');
$mw->optionAdd('*background' => 'black');
$mw->optionAdd('*borderwidth' => 0);
$mw->optionAdd('*insertborderwidth' => 0);
$mw->optionAdd('*selectborderwidth' => 0);
$mw->optionAdd('*highlightthickness' => 0);
$mw->optionAdd('*hightlightcolor' => 'black');
$mw->optionAdd('*selectbackground' => 'black');
my $f = $mw->Frame(-borderwidth => 0,
-highlightthickness => 0,
)->pack(-expand => 1,
-fill => 'both',
);
$f->Label(-text => 'First label')->pack;
$f->Text(
-highlightthickness => 0
)->pack;
my $canvas = $f->Scrolled("Canvas",
-highlightthickness => 0
)->pack();
MainLoop;
| [reply] [d/l] |
|
|