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,给窗口添加背景图片的主要内容,如果未能解决你的问题,请参考以下文章

pyside 为窗口添加图片

UEditor如何批量添加图片alt

qt里如何给button添加背景图片

java中swing界面上怎么给jpanel上添加背景图片

如何给PDF文件添加图片水印

如何给 GtkEventBox 一个透明背景?