python - 现在已弃用的 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(...)
解决方案
PyGTK 现在无人维护,已被 PyGObject(所有 GObject 库的通用包装器)取代。
gtk.Widget.window
等效的是Gtk.Widget.get_window()
:
返回:
self
的窗口。返回类型:
Gdk.Window
或None
如果实现,则返回小部件的窗口,
None
否则
没有对应的 PyGObject gtk.gdk.Window.property_change
。该函数仍然存在于 Gdk3 中gdk_property_change()
,但“不可自省”,因此没有GObject 自省绑定(这是 PyGObject 使用的)。
请参阅如何为 GTK 窗口保留屏幕空间?使用python-xlib
.
请注意,仅当小部件已实现Gtk.Widget.get_window()
时才会返回。一些小部件(例如)将使用它们的父小部件(参见文档)并在实现时返回。Gdk.Window
Gtk.Label
Gdk.Window
gtk_widget_set_has_window()
有关小部件生命周期的更多详细信息,请参阅GTK+/Gnome 应用程序开发中的小部件概念。
PyGObject 中 GObject 的属性也可以通过该GObject.Object.props
属性访问,因此您也可以使用它Gtk.Widget.props.window
来访问小部件的Gdk.Window
. 基本上所有(我遇到的所有)属性在 PyGObject 绑定中都有一个关联的get_xxx()
andset_xxx()
方法,因此您可以使用它们,或者props
如果您更喜欢使用属性语法,可以使用这些方法。
有关更多详细信息,请参阅有关属性的 PyGObject 文档。
推荐阅读
- python - 在不同的文件中引用 pandas 数据框
- angular - 如果浏览器不是全屏,则在使用 clr-datagrid 和 clrDgRowSelection 时,最后一个单元格的 style.width.% 不正确
- ruby-on-rails - 在 Rails 查询上运行 ruby 时 Nginx 上游超时错误
- node.js - ReactJS - 项目不会立即附加,只会刷新页面
- python - 在Python中获取字符串中字符的索引
- javascript - 我如何循环浏览网页并运行 javascript 代码(或获取元素数据)
- r - 如何根据用户输入的内容在导航栏上显示不同的选项?
- r - R中多列的密集排名
- javascript - 无法解析 mdl 模块的“反应”
- android - Play Store 在预装的 GS 安卓模拟器上被禁用