2017-01-16 7 views
1

私はキーを押したときにGenieでこのウィジェットを停止できますか?Gtk.Spinnerを停止しますか?

 
// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
uses Gtk 
init  
    Gtk.init (ref args) 
    var test = new TestVentana() 
    test.show_all()  
    Gtk.main() 

class TestVentana: Window 

    spinner: Gtk.Spinner  

    init   
     title = "Ejemplo Gtk"  
     default_height = 300 
     default_width = 300 
     border_width = 50  
     window_position = WindowPosition.CENTER  
     destroy.connect(Gtk.main_quit) 

     var spinner = new Gtk.Spinner()   
     spinner.active = true  
     add (spinner) 

     //key_press_event += tecla // OBSOLETO 
     key_press_event.connect(tecla) 

    def tecla(key : Gdk.EventKey):bool  
     //spinner.active = false ??? 
     //spinner.stop()   ??? 
     return true 

EDIT:

 
// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
uses Gtk 
init  
    Gtk.init (ref args) 
    var test = new TestVentana() 
    test.show_all()  
    Gtk.main() 

class TestVentana: Window 

    spinner: Gtk.Spinner   

    init   
     title = "Ejemplo Gtk"  
     default_height = 300 
     default_width = 300 
     border_width = 50  
     window_position = WindowPosition.CENTER  
     destroy.connect(Gtk.main_quit) 

     spinner = new Gtk.Spinner()   
     spinner.active = true  
     add (spinner) 

     // key_press_event += tecla // OBSOLETO 
     key_press_event.connect(tecla) 

    def tecla(key : Gdk.EventKey):bool  
     spinner.active = false  
     return true 

答えて

2

あなたは完全にスコープの概念が適用されていませんでした。(それはスコープの問題だった)ソリューションを提供するアル・トーマスに感謝します。あなたのコンストラクタで 、ライン:

var spinner = new Gtk.Spinner()

はあなたのコンストラクタの範囲で、新しい変数、spinnerを作成します。 varキーワードを削除し、それが動作します:

spinner = new Gtk.Spinner()

それは今、クラスのスコープ内で宣言スピナー変数を使用しますので、それはあなたのteclaクラスメソッドで利用できるようになります。

また、変数をprivateにするためにアンダースコアを追加しました。したがって、クラスのスコープでのみ表示され、クラスをインスタンス化するプログラム の部分には表示されません。 です。

// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
[indent=4] 
uses Gtk 

init 
    Gtk.init(ref args) 
    var test = new TestVentana() 
    test.show_all() 
    Gtk.main() 

class TestVentana:Window 

    _spinner: Gtk.Spinner 

    construct() 
     title = "Ejemplo Gtk" 
     default_height = 300 
     default_width = 300 
     border_width = 50 
     window_position = WindowPosition.CENTER 
     destroy.connect(Gtk.main_quit) 

     _spinner = new Gtk.Spinner() 
     _spinner.active = true 
     add(_spinner) 

     key_press_event.connect(tecla) 

    def tecla(key:Gdk.EventKey):bool 
     _spinner.active = false 
     return true 
+0

私は質問を編集していますが、あなたは答えました。 – Webierta

関連する問題