2011-06-13 28 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(或一些模型)之外的格莱德。这确实不是很难做到,而且文档太棒了。

然后,尝试连接鼠标光标更改代码,并查看它是否有效。