首页 > 解决方案 > 现在已弃用的 self.window 的替代品是什么?

问题描述

我正在使用运行 rhel8 的 Python 3 和 GTK 3 移植使用 Python 2.7 和 Gtk 2 的脚本。

运行脚本会报错:'X' 对象没有属性 'window',以前版本的 python 和 gtk 没有抱怨。

class XWindow(Gtk.Window):
     def __init__(self, wtype = Gtk.WindowType.TOPLEVEL):
          Gtk.Window.__init__(self, wtype)
class X(XWindow):
     def __init__(self, vpos, mgr):
         XWindow.__init__( self )
         ...
         ...
         ...
     def XFunction:
         if self.window:
            ...
            ...
            self.window.property_change(...)

标签: pythonpython-3.xgtkgtk3pygtk

解决方案


PyGTK 现在无人维护,已被 PyGObject(所有 GObject 库的通用包装器)取代。

gtk.Widget.window等效的是Gtk.Widget.get_window()

返回: self的窗口。

返回类型: Gdk.WindowNone

如果实现,则返回小部件的窗口,None否则

没有对应的 PyGObject gtk.gdk.Window.property_change。该函数仍然存在于 Gdk3 中gdk_property_change(),但“不可自省”,因此没有GObject 自省绑定(这是 PyGObject 使用的)。

请参阅如何为 GTK 窗口保留屏幕空间?使用python-xlib.


请注意,仅当小部件已实现Gtk.Widget.get_window()时才会返回。一些小部件(例如)将使用它们的父小部件(参见文档)并在实现时返回。Gdk.WindowGtk.LabelGdk.Windowgtk_widget_set_has_window()

有关小部件生命周期的更多详细信息,请参阅GTK+/Gnome 应用程序开发中的小部件概念。

PyGObject 中 GObject 的属性也可以通过该GObject.Object.props属性访问,因此您也可以使用它Gtk.Widget.props.window来访问小部件的Gdk.Window. 基本上所有(我遇到的所有)属性在 PyGObject 绑定中都有一个关联的get_xxx()andset_xxx()方法,因此您可以使用它们,或者props如果您更喜欢使用属性语法,可以使用这些方法。

有关更多详细信息,请参阅有关属性的 PyGObject 文档


推荐阅读