Ale*_*rra 7 javascript gnome-shell gnome-3 gnome-shell-extensions gjs
我正在尝试使用gjs为gnome-shell创建简单的gtk应用程序.
它的窗口只包含Gtk.TextView,我想在用户输入时处理事件.
这是我的代码:
#!/usr/bin/gjs
var Gtk = imports.gi.Gtk;
function MainWindow () {
this._init ();
}
MainWindow.prototype = {
_init: function () {
this.window = new Gtk.Window ({
title: "Just Calculator",
window_position: Gtk.WindowPosition.CENTER,
default_height: 400,
default_width: 440,
});
//this.window.show ();
this.window.connect ("hide", Gtk.main_quit);
this.window.connect ("delete-event", function () {
Gtk.main_quit();
return true;
});
this.textbox = new Gtk.TextView();
this.textbox.connect('key-press-event', this._keyPress);
var sw = new Gtk.ScrolledWindow ({shadow_type:Gtk.ShadowType.IN});
sw.add (this.textbox);
this.window.add(sw);
this.window.show_all();
},
_keyPress: function(textview, event) {
print(event, event.type, event.keyval);
textview.buffer.text = 'ok';
return true;
}
}
Gtk.init (null, null);
var window = new MainWindow ();
Gtk.main ();
Run Code Online (Sandbox Code Playgroud)
它通常工作,但我无法读取event.keyval:控制台输出是"未定义":
[union instance proxy GIName:Gdk.Event jsobj@0x7f99b1027040 native@0x1dfeab0] undefined undefined
Run Code Online (Sandbox Code Playgroud)
有人能告诉我我做错了什么吗?谢谢!
Gdk.Event
不包含属性type
或keyval
,这就是它们的原因undefined
。它出现的时间并不长,但现在有关于 GObject Introspection 与 Gjs 绑定的文档,网址为https://people.gnome.org/~gcampagna/docs。
从打印输出中您可以看到这event
是 a Gdk.Event
,其文档位于https://people.gnome.org/~gcampagna/docs/Gdk-3.0/Gdk.Event.html。在那里你可以看到有 functionget_event_type
和get_keyval
。第一个返回一个Gdk.EventType
( https://people.gnome.org/~gcampagna/docs/Gdk-3.0/Gdk.EventType.html ),后者返回一个数组,其中第二个元素包含按下的键的数字代码。您可以将数字键与 Clutter 中以以下开头的常量进行比较KEY_
。
例如,在代码顶部添加一些导入
var Gdk = imports.gi.Gdk;
var Clutter = imports.gi.Clutter;
Run Code Online (Sandbox Code Playgroud)
并将日志行更改为
print(event,
event.get_event_type() === Gdk.EventType.KEY_PRESS,
event.get_keyval()[1] === Clutter.KEY_Escape);
Run Code Online (Sandbox Code Playgroud)
得到一些合理的输出。
归档时间: |
|
查看次数: |
504 次 |
最近记录: |