我已经搜索并测试了很多,并且没有找到强制窗口的方法,并且所有孩子都对所有事件使用相同的光标。
在下面的示例代码中,我希望使用DIAMOND_CROSS
光标,即使将鼠标悬停在Gtk.Paned
句柄上也是如此。现在它切换到水平尺寸箭头。
import gi
gi.require_version('Gdk', '3.0')
gi.require_version('Gtk', '3.0')
from gi.repository import Gdk, Gtk
class MainWindow(Gtk.ApplicationWindow):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("realize", self.on_realize)
self.connect('delete_event', Gtk.main_quit)
self.set_default_size(800, 600)
button1 = Gtk.Button('Button 1')
button2 = Gtk.Button('Button 2')
paned = Gtk.Paned()
paned.set_position(400)
paned.add1(button1)
paned.add2(button2)
self.add(paned)
self.show_all()
def on_realize(self, widget):
cursor = Gdk.Cursor(Gdk.CursorType.DIAMOND_CROSS)
self.get_window().set_cursor(cursor)
if __name__ == '__main__':
win = MainWindow()
Gtk.main()
答案 0 :(得分:0)
我刚检查了paned
对象的来源gtk_paned_state_flags_changed
函数中包含以下代码:
if (gtk_widget_is_sensitive (widget))
cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget),
priv->orientation == GTK_ORIENTATION_HORIZONTAL
? "col-resize" : "row-resize");
else
cursor = NULL;
(https://git.gnome.org/browse/gtk+/tree/gtk/gtkpaned.c?h=3.18.6#n1866)
因此理论上你可以覆盖do_state_flags_changed
小部件的paned
函数(以及具有这种行为的所有其他小部件)来实现你想要的结果。
但是当你要求一种方法来为所有对象设置光标时,答案很简单:不,这是不可能的。