2015-06-04 10 views
7

Tôi đang cố gắng tạo ứng dụng gtk đơn giản cho gnome-shell bằng gjs.GJS: Gtk.TextView-press-event không hoạt động

Cửa sổ của nó chỉ chứa Gtk.TextView và tôi muốn xử lý sự kiện khi người dùng nhập.

Đây là mã của tôi:

#!/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(); 

Nó hoạt động thường nhưng tôi không thể đọc event.keyval: giao diện điều khiển đầu ra là "không xác định":

[union instance proxy GIName:Gdk.Event [email protected] [email protected]] undefined undefined 

Có thể ai đó cho tôi biết những gì tôi đang làm sai rồi? Cảm ơn!

+0

Bạn đã cố gắng khắc phục điều này chưa? – gosukiwi

+0

thử điều này: '_keyPress: function (self, textview, event)' – Gonzalo

Trả lời

0

Gdk.Event không chứa các thuộc tính type hoặc keyval và đó là lý do tại sao chúng là undefined. Nó đã không được xung quanh cho rằng dài, nhưng bây giờ có tài liệu có sẵn cho GObject Introspection bindings để Gjs tại https://people.gnome.org/~gcampagna/docs.

Từ bản in ra, bạn thấy rằng eventGdk.Event và tài liệu hướng dẫn đó là https://people.gnome.org/~gcampagna/docs/Gdk-3.0/Gdk.Event.html. Ở đó bạn có thể thấy rằng có chức năng get_event_typeget_keyval. Đầu tiên trả về một Gdk.EventType (https://people.gnome.org/~gcampagna/docs/Gdk-3.0/Gdk.EventType.html) và sau đó là một mảng trong đó phần tử thứ hai chứa một mã số cho phím bấm. Bạn có thể so sánh các phím số với hằng số trong Trình lộn xộn bắt đầu bằng KEY_.

Ví dụ thêm một số hàng nhập khẩu để đầu mã của bạn

var Gdk = imports.gi.Gdk; 
var Clutter = imports.gi.Clutter; 

và thay đổi dòng khai thác gỗ để

print(event, 
     event.get_event_type() === Gdk.EventType.KEY_PRESS, 
     event.get_keyval()[1] === Clutter.KEY_Escape); 

để có được một số lượng hợp lý.