ldx has asked for the wisdom of the Perl Monks concerning the following question:

Hi all,

I'm currently adding a splashscreen to my application. I'm using Tk::Splashscreen for that (but it is possible to switch)
I've created a nice png with some transparency and blurring on the sides, to create a nice effect.

The problem is this:
I expected to see my desktop background through the transparent parts of my image, but instead, I see the background of the canvas that I put the image on.

This is my code:
my $splash = $mw->Splashscreen(-milliseconds => 3000); my $canvas = $splash->Canvas(-width => 420, -height => 300)->pack; $canvas->createImage(0, 0, -anchor => 'nw', -image => $mw->Photo(-file => 'gfx/splash.png')); $mw->withdraw; $splash->Splash();
I've also tried to put the image on a label instead of on a canvas:
$splash->Label(-image => $mw->Photo(-file => 'gfx/splash.png'));
But the result is the same. I've read in Perl-Tk's docs, and I've seen here and there that backgrounds can be set to be transparent by setting the -background to undef. But that doesn't seem to help me too.

Do any of you monks have any idea of how I can make the background of my image-container transparent too? So that I see whatever is behind the splashscreen through the transparent parts of my image?
Thanks! ldx

Replies are listed 'Best First'.
Re: Splashscreen with transparency
by zentara (Cardinal) on Oct 09, 2008 at 12:05 UTC
      Thanks zentara,

      But is there really no way to do it with Perl::Tk?
      I'm not very eager to do my entire UI over in Gtk :)

      Regards,
      ldx
        No, Tk dosn't have transparency yet. Tk::Zinc will allow window shaping (round windows, etc), but not transparency. You can run Tk and Gtk2 simultaneously in the same script, with a master loop and a timer for the second loop. So you could pop your splashscreen, then remove the Gtk2 and run your Tk. Here is a simple example, just stop the timer after the splashscreen is closed, and undef Gtk2 stuff.
        #!/usr/bin/perl -w use strict; use Gtk2; use Tk; my $mw = MainWindow->new(-title=>'Tk Window'); Gtk2->init; my $window = Gtk2::Window->new('toplevel'); $window->set_title('Gtk2 Window'); my $glabel = Gtk2::Label->new("This is a Gtk2 Label"); $window->add($glabel); $window->show_all; my $tktimer = $mw->repeat(10, sub{ Gtk2->main_iteration while Gtk2->events_pending; #manually pump the Gtk2 eventloop as a slave }); my $tktimer1 = $mw->after(1000, sub{ $window->destroy; Gtk2->main_iteration while Gtk2->events_pending; $tktimer->cancel; }); $mw->Button(-text=>' Quit ', -command => sub{exit} )->pack(); MainLoop;

        I'm not really a human, but I play one on earth Remember How Lucky You Are
Re: Splashscreen with transparency
by Anonymous Monk on Oct 09, 2008 at 07:15 UTC
    Its not supported by Tk