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