Perl / Gtk3,将背景图像添加到窗口

时间:2019-03-07 18:01:03

标签: css perl gtk3

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

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

我很乐意将背景图像添加到Gtk3 :: Frame或Gtk3 :: Box,甚至完全避免使用CSS,但是我无法使用这些方法中的任何一种。

我认为代码几乎是正确的,因为它确实可以将背景图像添加到仅一个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;
}

1 个答案:

答案 0 :(得分:0)

  

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

只需删除屏幕提供程序(并保留窗口提供程序)。所以注释掉这一行:

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