Gtk.Grid():如何动态修改行数

Gtk.Grid(): how to dynamically modify the number of rows

如何从下方更改 simple_table_code,以便能够修改 Gtk.Grid 的行数(例如通过单击其中一个按钮)?

我想我必须从 _init__ 中删除网格部分,但我想保留那里的按钮。

当我尝试这样做时,网格根本不显示。另外,除了我用的方法,还有什么更有效的获取单元格边框的方法吗?

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
class MyTable(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Table")
        grid = Gtk.Grid(column_spacing=1,row_spacing=1)
        grid.override_background_color(Gtk.StateFlags.NORMAL,Gdk.RGBA(0.0,0.0,0.0,0.5))
        self.add(grid)
        for i in range (5):
            butt=Gtk.Button(label=i)
            butt.connect("clicked",self.on_button_clicked)
            grid.attach(butt,i,1,1,1)
        for i in range (5):
            for y in range(10):
                a=Gtk.Label(label=i)
                a.override_background_color(Gtk.StateFlags.NORMAL,Gdk.RGBA(0.95,0.95,0.95,1.0))
                grid.attach(a,i,y+1,1,1)        

win = MyTable()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

你做的 hack 看起来不错,我不知道你的程序会做什么,但你也可以考虑使用 Gtk.DrawingArea.

要使用按钮添加行,请看一下:

from gi.repository import Gtk, Gdk

class MyTable(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Table")

        main_box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        button_add_rows=Gtk.Button(label="Add Rows")
        button_add_rows.connect("clicked", self.add_row)
        main_box.add(button_add_rows)

        self.grid = Gtk.Grid(column_spacing=1,row_spacing=1)
        self.grid.override_background_color(Gtk.StateFlags.NORMAL,Gdk.RGBA(0.0,0.0,0.0,0.5))
        main_box.add(self.grid)

        self.number_of_columns=5
        self.number_of_rows=10

        self.add(main_box)

        for column in range(self.number_of_columns):
            button=Gtk.Button(label=column)
            self.grid.attach(button,column,1,1,1)

        for column in range(self.number_of_columns):
            for row in range(self.number_of_rows):
                a=Gtk.Label()
                a.override_background_color(Gtk.StateFlags.NORMAL,Gdk.RGBA(0.95,0.95,0.95,1.0))
                self.grid.attach(a,column, row+1,1,1)        


    def add_row(self, button, data=None):
        for column in range(self.number_of_columns):
            for row in range(self.number_of_rows+1, self.number_of_rows+2):
                a=Gtk.Label()
                a.override_background_color(Gtk.StateFlags.NORMAL,Gdk.RGBA(0.95,0.95,0.95,1.0))
                self.grid.attach(a,column, row+1,1,1)

        self.grid.show_all()
        self.number_of_rows+=1


table_window = MyTable()
table_window.connect("delete-event", Gtk.main_quit)
table_window.show_all()
Gtk.main()

你可以注意到我替换了一些 Gtk.Label(label=column) 宽度 Gtk.Label()。实际上,第一行按钮已经给出了单元格的名称,并且您正在向单元格插入 "invisible" 文本,因为字体和背景也是白色的。如果用户使用黑色文本,table 将填充数字。我认为使用 Gtk.DrawingArea 会更好。

此外,请记住,当您创建 Gtk 小部件时,如果您想要查看它,则需要显示它。在这种情况下,我在方法 add_row

上使用了 self.grid.show_all()