Вот пример использования обработчика событий ERASE_BACKGROUND
:
package MyFrame;
use Wx qw(:everything wxBITMAP_TYPE_JPEG);
use base qw( Wx::Frame );
use feature qw(say);
use strict;
use warnings;
use Wx::Event;
sub new {
my ( $class, $path ) = @_;
my $self
= $class->SUPER::new( undef, -1, 'Test', [ -1, -1 ], [ 600, 400 ], );
my $bitmap = Wx::Bitmap->new( $path , wxBITMAP_TYPE_JPEG );
Wx::Event::EVT_ERASE_BACKGROUND( $self, sub { $self->setBgImage( $bitmap, @_) });
return $self;
}
sub setBgImage {
my ( $self, $bitmap, $frame, $evt ) = @_;
return if !defined $evt;
my $dc = $evt->GetDC();
my $size_x = $bitmap->GetWidth;
my $size_y = $bitmap->GetHeight;
for ( my $x = 0; $x < 600; $x += $size_x ) {
for ( my $y = 0; $y < 400; $y += $size_y ) {
$dc->DrawBitmap( $bitmap, $x, $y, 0 );
}
}
}
package MyApp;
use base 'Wx::App';
my $path = 'logo.jpg';
sub OnInit {
my ($self) = @_;
my $frame = MyFrame->new($path);
$frame->Show(1);
}
package main;
MyApp->new->MainLoop;
Это дает мне следующий результат в Ubuntu 20.04:
См. Также: wx Python: Размещение фонового изображения на панели