【发布时间】:2019-03-07 18:01:03
【问题描述】:
我正在尝试向窗口添加背景图像。使用 CSS 样式,很简单,但我只想将图像添加到单个窗口,而不是全部。
下面的脚本创建了两个 Gtk 窗口,一个带有 CSS,另一个没有。它不起作用,因为 CSS 样式被添加到两个窗口。
我很乐意为 Gtk3::Frame 或 Gtk3::Box 添加背景图像,甚至完全避免使用 CSS,但我无法让这些方法中的任何一个起作用。
我认为代码几乎是正确的,因为它确实只为一个 Gtk3::TextView(但不是两个)添加背景图像。
#!/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;
}
【问题讨论】: