Python 无法为窗口中的所有对象和事件获取相同的光标
我已经搜索和测试了很多,还没有找到一种方法来强制一个窗口,所有的孩子在所有事件中都使用相同的光标 在下面的示例代码中,我希望即使将光标悬停在Python 无法为窗口中的所有对象和事件获取相同的光标,python,gtk3,Python,Gtk3,我已经搜索和测试了很多,还没有找到一种方法来强制一个窗口,所有的孩子在所有事件中都使用相同的光标 在下面的示例代码中,我希望即使将光标悬停在Gtk.Paned手柄上,也能使用DIAMOND_CROSS光标。现在,它切换到水平调整箭头 import gi gi.require_version('Gdk', '3.0') gi.require_version('Gtk', '3.0') from gi.repository import Gdk, Gtk class MainWindow(Gtk.
Gtk.Paned
手柄上,也能使用DIAMOND_CROSS
光标。现在,它切换到水平调整箭头
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()
我刚刚检查了
paned
对象的源,该对象在gtk\u paned\u state\u flags\u 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;
()
因此,从理论上讲,您可以覆盖paned
小部件(以及具有类似行为的所有其他小部件)的do\u state\u flags\u changed
功能,以实现您想要的结果
但是,当您要求一次设置所有对象的光标时,答案很简单:不,这是不可能的。我刚刚检查了
paned
对象的源,该对象在gtk\u paned\u state\u flags\u函数中更改了以下代码:
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;
()
因此,从理论上讲,您可以覆盖paned
小部件(以及具有类似行为的所有其他小部件)的do\u state\u flags\u changed
功能,以实现您想要的结果
但是,当您要求一次设置所有对象的光标时,答案很简单:不,这是不可能的。谢谢。我认为这似乎是解决我的问题的一个良好开端。我会深入研究的。顺便说一句,我没有足够的代表投票支持你的答案,所以你必须接受以下评论:)仅供参考,即使没有代表也可以接受答案。谢谢你。我认为这似乎是解决我的问题的一个良好开端。我会深入研究的。顺便说一句,我没有足够的代表投票支持你的答案,所以你必须接受以下评论:)仅供参考,即使没有代表也可以接受答案。