我正在尝试一个简单的Perl GtK,gui只包含一个窗口和一个垂直框.我得到一个分段错误,在此之前有一个警告:"无法创建抽象(非实例化)类型的实例'GtkBox'"
GUI是:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Text to EPUB</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</interface>
Run Code Online (Sandbox Code Playgroud)
代码是:
#!/usr/bin/perl
use warnings;
use strict;
use File::Spec::Functions qw(rel2abs);
use File::Basename;
use File::Copy;
use Glib;
use Gtk2 '-init';
my $basedir = dirname(rel2abs($0));
my $guifile = "$basedir/txt2epub1.gui";
print "GUI file: $guifile\n";
my $builder = Gtk2::Builder->new();
$builder->add_from_file($guifile) or die "Couldn't read $guifile";
$builder->connect_signals( undef );
my $window = $builder->get_object("window1") or die "Can't open main window";
$window->show_all();
Gtk2->main();
# Callbacks
sub cb_window1_destroy {
Gtk2->main_quit();
exit;
}
Run Code Online (Sandbox Code Playgroud)
xml文件包含以下行:
<!-- interface-requires gtk+ 3.0 -->
Run Code Online (Sandbox Code Playgroud)
但是你的Perl脚本有:
use Gtk2 '-init';
Run Code Online (Sandbox Code Playgroud)
看起来您正在尝试使用Gtk2库加载使用Gtk3创建的文件.