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