【问题标题】:What is the replacement for self.window which is now deprecated?现在已弃用的 self.window 的替代品是什么?
【发布时间】:2021-07-19 22:56:38
【问题描述】:

我正在使用运行 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(...)

【问题讨论】:

  • error 'X' object has no attribute 'window' 并不意味着它已被弃用 - 它仅意味着 window 不存在 - 并且它可能从未存在于 GTK 3 中。 GTK 3 和 GTK 2 可能有完全不同的代码,有时你无法比较它们。
  • 我不知道self.window 应该是什么——但对我来说self 已经是window(Gtk.Window)。你试过if self: self.property_change(...)。或者你可能忘记在课堂上的某个地方X 去做self.window = SomeOtherWindow()
  • self.propery_change 抱怨 property_change 也不存在。在移植我的脚本之前,我不必明确声明self.window = anything。它似乎知道引用自己,我想我的问题是如何引用创建窗口对象时隐式创建的窗口?
  • @furas 忘记标记
  • 更好地展示在 Python 2 中工作的原始代码。

标签: python python-3.x gtk gtk3 pygtk


【解决方案1】:

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

gtk.Widget.window 等价于 Gtk.Widget.get_window():

返回:self 的窗口。

返回类型: Gdk.Window 或 None

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

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

有关使用python-xlib 的解决方法,请参阅How to reserve screen space for GTK window?。


请注意,Gtk.Widget.get_window() 只会在小部件为 realized 时返回 Gdk.Window。一些小部件(例如Gtk.Label)将使用其父小部件的Gdk.Window(请参阅gtk_widget_set_has_window() 的文档)并在实现时返回。

有关小部件生命周期的更多详细信息,请参阅Widget Concepts from GTK+/Gnome Application Development。

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

更多详情请参阅PyGObject docs on properties。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2021-05-26
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多