Perl/Gtk3,给窗口添加背景图片
Posted
技术标签:
【中文标题】Perl/Gtk3,给窗口添加背景图片【英文标题】:Perl/Gtk3, add a background image to a window 【发布时间】: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;
【问题讨论】:
【参考方案1】:我正在尝试向窗口添加背景图像。使用 CSS 样式, 它很简单,但我只想将图像添加到单个 窗口,而不是全部。
只需删除屏幕提供程序(并保留窗口提供程序)。所以注释掉这一行:
Gtk3::StyleContext::add_provider_for_screen($screen, $provider, 600);
【讨论】:
感谢 Håkon,你是最棒的!以上是关于Perl/Gtk3,给窗口添加背景图片的主要内容,如果未能解决你的问题,请参考以下文章