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

时间:2015-11-21 21:27:31

标签: python gtk grid-layout gtk3

如何从下面更改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()

1 个答案:

答案 0 :(得分:1)

你正在做的黑客似乎很好,我不知道你的计划会做什么,但你也可以考虑使用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()。实际上,第一行按钮已经给出了单元格的内容,并且您正在向单元格插入“不可见”文本,因为字体是白色的,也是背景。如果用户使用黑色文本,则表格将填充数字。我认为使用Gtk.DrawingArea会更好。

另外,请记住,在创建Gtk小部件时,如果要查看它,则需要显示它。在这种情况下,我在方法self.grid.show_all()

上使用了add_row