2011-06-13 29 views
1

在我的應用程序中,我想更改所有按鈕的光標類型,鼠標離開並輸入事件。爲此,我想編寫通用代碼,而不是用適當的信號連接每個按鈕。更改Pygtk應用程序中的光標類型

這是一個示例代碼。

import gtk 

class Button(gtk.Button): 

    __gsignals__ = { 
    "leave" : "override", 
    "enter" : "override" 
    } 

    def do_leave(self): 
     self.window.set_cursor(None) 

    def do_enter(self): 
     print "Enter" 
     self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2)) 

class EventBox: 

    def __init__(self): 
    window = gtk.Window() 
    vbox = gtk.VBox() 
    label = gtk.Label("Change Cursor") 
    vbox.pack_start(label, False, False) 
    bt = gtk.Button('Ok') 
    bt.connect('clicked', self.on_click, window) 
    vbox.pack_start(bt, False, False) 
    eventbox = gtk.EventBox() 
    window.set_size_request(400,400) 
    window.add(eventbox) 
    eventbox.add(vbox) 
    window.show_all() 

    def on_click(self, widget, window, *args): 
    print "On click" 
    window.destroy() 
    NextWin() 

    def mouse_enter_event(self, widget, *args): 
    print "Enter" 
    widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2)) 

class NextWin: 
    def __init__(self): 
    window = gtk.Window() 
    vbox = gtk.VBox() 
    label = gtk.Label("Change Cursor") 
    vbox.pack_start(label, False, False) 
    bt = gtk.Button('Ok') 
    vbox.pack_start(bt, False, False) 
    eventbox = gtk.EventBox() 
    window.connect("destroy", lambda w: gtk.main_quit()) 
    window.set_size_request(400,400) 
    window.add(eventbox) 
    window.set_name('Next Window') 
    window.set_title('Next Window') 
    eventbox.add(vbox) 
    window.show_all() 

gtk.Button = Button 
EventBox() 
gtk.main() 

上面的代碼是爲gtk按鈕工作,但不適用於glade文件按鈕。 glade文件按鈕有什麼問題?

我還在尋找更適合的方法來改變光標類型。 有沒有人有任何建議或更正上述代碼?

回答

0

我知道這已經在這裏呆了一段時間,所以只是一個想法...也許重建你的GUI(或一些模型)之外的格萊德。這確實不是很難做到,而且文檔太棒了。

然後,嘗試連接鼠標光標更改代碼,並查看它是否有效。