1

我正在尝试一个简单的 Perl GtK,gui 只包含一个窗口和一个垂直框。我收到分段错误,在此之前出现警告:“无法创建抽象(非实例化)类型‘GtkBox’的实例”

图形用户界面是:

<?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>

代码是:

#!/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;
}
4

1 回答 1

5

xml 文件有这一行:

<!-- interface-requires gtk+ 3.0 -->

但是你的 Perl 脚本有:

use Gtk2 '-init';

看起来您正在尝试使用 Gtk2 库加载使用 Gtk3 创建的文件。

于 2012-08-11T18:04:17.380 回答