perl/gtk3,在窗口中添加一个背景图像



我正在尝试将背景图像添加到窗口中。使用CSS样式,这很简单,但是我只想将图像添加到一个窗口中,而不是全部。

下面的脚本创建了两个GTK窗口,一个带有CSS,另一个没有CSS。它不起作用,因为CSS样式都添加到两个窗口中。

我很乐意将背景图像添加到GTK3 ::帧或gtk3 :: box,甚至完全避免CSS,但我无法获得这些方法可以工作。

我认为代码几乎是正确的,因为它 di d di 仅将背景图像添加到一个GTK3 :: TextView(但不是两个)。<<<<。/p>

#!/usr/bin/perl
package bgtest;
use strict;
use diagnostics;
use warnings;
use Gtk3 '-init';
use Glib qw(TRUE FALSE);
use Cairo;
&drawWin(FALSE);
&drawWin(TRUE);
Gtk3->main();
sub drawWin {
    my ($cssFlag) = @_;
    my $window = Gtk3::Window->new('toplevel');
    $window->set_position('center');
    $window->set_default_size(400, 300);
    $window->signal_connect('delete-event' => sub {
        Gtk3->main_quit();
        exit;
    });
    if ($cssFlag) {
        # Set up the window's background image using a CSS style
        $window->set_title('CSS ON');
        my $imagePath = "/home/YOURNAME/bg.png";
        my $provider = Gtk3::CssProvider->new();
        my $display = Gtk3::Gdk::Display::get_default();
        my $screen = Gtk3::Gdk::Display::get_default_screen($display);
        Gtk3::StyleContext::add_provider_for_screen($screen, $provider, 600);
        my $theming = "#my_win_id, window.background {n";
        $theming .= "   background-image: url("$imagePath");n";
        $theming .= "   background-repeat: repeat;n";
        $theming .= "   background-position: top left;n";
        $theming .= "}";
        $provider->load_from_data ([map ord, split //, $theming]);
        my $context = $window->get_style_context();
        $context->add_provider($provider, 600);
    } else {
        # Don't use a background image
        $window->set_title('CSS OFF');
    }
    $window->show_all();
    return $window;
}

我正在尝试将背景图像添加到窗口中。使用CSS样式, 这很简单,但是我只想将图像添加到一个 窗口,不是全部。

只需删除屏幕提供商(并保留窗口提供商)。因此,请评论这条线:

Gtk3::StyleContext::add_provider_for_screen($screen, $provider, 600);

最新更新