首页 > 解决方案 > 如何更新先前添加到 Gtk.Window 的 Gtk.Grid?

问题描述

在 python 上,我创建 aGtk.Window并将其添加为Gtk.Grid. 但是,在代码的后面,我想用一个新的 Grid 来更新这个已经定义的 Grid 和新的内容。

因此,天真地,我尝试获取第一个Grid对象并为其分配新值,但它不起作用。

所以,这是我的最小示例代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# MWE for refreshing Gtk.Grid

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk
from gi.repository import Gdk


class GridWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Reassigning Grid MWE")
        self.connect("destroy", Gtk.main_quit)

        # Declaring the first Grid
        grid1=Gtk.Grid()
        label1=Gtk.Label("foo")
        grid1.add(label1)

        # Declaring the second Grid
        grid2=Gtk.Grid()
        label2=Gtk.Label("bar")
        grid2.add(label2)

        # Adding the first Grid to the Window
        self.add(grid1)

        # Trying to replacing the first Grid by the second
        ##############################
        self.get_children()[0]=grid2 # <- The problem is here
        ##############################

screen = Gdk.Screen.get_default()
win = GridWindow()
win.show_all()
Gtk.main()

当我这样做时self.get_children()[0]=grid2Grid通常应该用第二个替换第一个。但是我得到的窗口仍然显示“foo”女巫是第一个的渲染Grid

那么如何获取包含 的对象Gtk.Grid并将其替换为 的内容grid2

标签: pythonrefreshgtk3pygtk

解决方案


我不确定你想要达到什么目的......但这会奏效

##############################
self.remove(grid1)
self.add(grid2)
##############################

推荐阅读