Perl/Tk ist wie jede andere als plattformunabhängig gelobte Sache manchmal doch plattformspezifisch. So zum Beispiel auch dann, wenn man das Icon eines MainWindows setzen möchte. Das ist das Icon oben link (unter Windows), das üblicherweise jede Applikation anzeigt. Wird das Icon nicht gesetzt, erscheint bei Perl/Tk-Anwendungen das rote Tk.
Für Plattformem außer Windows kann das Programmicon mit der Methode Icon
gesetzt werden.
#!/Perl/bin/perl
use strict;
use warnings;
use Tk;
use Tk::PNG;
use File::Spec;
use FindBin qw/$Bin/;
my $mw = Tk::MainWindow->new;
$mw->geometry('200x100');
my $datei = File::Spec->catfile($Bin, 'img', 'run.png');
my $bild = $mw->Photo(
'my_icon',
-file => $datei,
);
$mw->Icon(-image => $bild);
my $b = $mw->Button(-image => $bild)->pack();
$mw->MainLoop;
Allerdings: hat das Icon einen transparenten Hintergrund, wird es auf Windows nicht richtig dargestellt. Dann wird der Icon-Hintergrund schwarz. Das verhindert das Modul Tk::Icon von Martin Schmuker, das es gut versteckt derzeit ausschließlich auf Bribes.org gibt, einem PPM-Repository.
Unter Verwendung des Moduls Tk::Icon
kann auch unter Windows eine Icon-Datei geladen werden, die einen transparenten Hintergrund hat. Und der Hintergrund wird dann auch transparent dargestellt. Der Nachteil: es muss eine ICO-Datei sein. ICO-Dateien kann man sich übrigens mit dem Zeichenprogramm Gimp erstellen.
#!/Perl/bin/perl
use strict;
use warnings;
use Tk;
use Tk::Icon;
use File::Spec;
use FindBin qw/$Bin/;
my $mw = Tk::MainWindow->new;
$mw->geometry('200x100');
my $datei = File::Spec->catfile($Bin, 'img', 'run-build-2.ico');
$mw->setIcon(-file => $datei);
$mw->MainLoop;