首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdk_device_get_source != GDK_SOURCE_KEYBOARD

gdk_device_get_source != GDK_SOURCE_KEYBOARD
EN

Stack Overflow用户
提问于 2014-02-16 02:03:26
回答 1查看 1.6K关注 0票数 2

下面是一个关于使用glade和vala的教程,可以找到这里

我遵循了说明,并确认我的代码与示例相同。

Vala的xml如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <signal name="destroy" handler="on_window1_destroy" swapped="no"/>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkEntry" id="entry1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="invisible_char">•</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="on_button1_clicked" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface> 

我编写的代码如下:

代码语言:javascript
复制
using Gtk;

/* When button click signal received */
public void on_button1_clicked (Button source) {
    /* change button label to clicked! */
    source.label = "Clicked!";
    stderr.printf ("Clicked! --> ");
}

/* when window close signal received */
public void on_window1_destroy (Window source) {
    Gtk.main_quit();
}

int main (string[] args) {
    Gtk.init (ref args);

    var builder = new Builder ();

    /* getting the glade file */
    builder.add_from_file ("sample.ui");
    builder.connect_signals (null);

    var window = builder.get_object ("window1") as Window;
    var entry = builder.get_object ("entry1") as Entry;
    var button = builder.get_object ("button1") as Button;

    /* that's another way to do something when signal received */
    button.clicked.connect (() => {
        stderr.printf ("%s\n", entry.get_text ());
    });
    window.show_all ();
    Gtk.main ();

    return 0;
}

当我运行编译后的vala时,我得到了窗口(如示例所示):

所以一切都很好。但是,当我尝试单击文本字段时,我会在控制台中得到一条Gtk关键错误消息:

(示例:16109):Gdk-关键**:gdk_device_get_n_axes:断言'gdk_device_get_source (设备) != GDK_SOURCE_KEYBOARD‘失败

我没有把注意力集中在球场上,因此我不能在球场上输入任何东西。我不知道为什么会发生这种事。我已经回顾了我所做的事情,我看不出我做错了什么。

顺便说一句,当我编译时,我注意到以下警告:

代码语言:javascript
复制
$ valac --pkg gtk+-3.0 --pkg gmodule-2.0 example.vala
example.vala:22.5-22.39: warning: unhandled error `GLib.Error'
    builder.add_from_file ("sample.ui");
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
example.vala.c: In function ‘main’:
example.vala.c:141:2: warning: ‘g_type_init’ is deprecated (declared at /usr/include/glib-2.0/gobject/gtype.h:669) [-Wdeprecated-declarations]
  g_type_init ();
  ^
Compilation succeeded - 1 warning(s)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-16 14:44:53

您需要将文本条目的can-focus属性设置为True,以便能够聚焦它(尽管我在代码中没有得到运行时错误)。

如果您正在使用GTK的最新版本(3.10),您可能希望阅读有关模板/复合小部件的内容,因为这样可以直接使用Gtk.Builder,您只需添加几个注释,就可以为您设置所有内容。

在GTK3中,expand & fill子属性被废弃为expandhexpandvexpandhalignvalign小部件属性,这些属性在分配和使用额外空间方面提供了更多的灵活性。

关于未处理错误的vala警告是因为代码没有捕获错误,例如未找到文件或返回builder.add_from_file的ui定义中的标记错误。

不要太担心第二个警告,vala正在为旧版本的glib生成代码,而不是您已经安装的版本。将--target-glib 2.36添加到vala命令行以修复它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21806335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档