我正在尝试将背景图像添加到窗口中。使用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;
}
答案 0 :(得分:0)
我正在尝试将背景图像添加到窗口中。使用CSS样式, 这很简单,但是我只想将图像添加到一个 窗口,不是全部。
只需删除屏幕提供程序(并保留窗口提供程序)。所以注释掉这一行:
Gtk3::StyleContext::add_provider_for_screen($screen, $provider, 600);