使用Glade在Gtk Treeview中创建可编辑单元格的列

9
我正在尝试创建一个简单的GUI,其中包含样本的x和y坐标的表格。我使用treeview,并且希望用户可以编辑表格中的单元格。在cellrenderer属性中,是否可以指定单元格是否可编辑,或者我必须在我的代码中指定?我使用Glade 3.6.1。
我刚刚发现,当我编辑我的treeview时,在Tree View Editor中取消勾选"Editable"框,就可以指定单元格是否可编辑,因为如果未勾选该框,则单元格的可编辑属性不再与模型相连接。但是,如果我运行程序,单元格是可编辑的,但我输入的值会消失。我该如何解决这个问题?为什么单元格不会存储我输入的值?
谢谢任何提示。

UI和模型没有连接。这个仓库可能会对你有所帮助 https://gitlab.gnome.org/albfan/gtktreeview-example - albfan
3个回答

6

对于任何遇到类似问题的人,我已经解决了它 - 每当编辑单元格时,模型中相应的记录需要更改,以下是Python示例代码:

cell.connect("edited", self.text_edited, model, column)

def text_edited( self, w, row, new_text, model, column)
  model[row][column] = new_text

1
对于Python GTK来说,默认情况下,Gtk.CellRendererText小部件中的文本是不可编辑的。你可以通过将“editable”属性的值设置为True来改变这一点。
renderer = Gtk.CellRendererText();
renderer.set_property("editable", True);

然后您可以连接到“edited”信号并相应地更新您的Gtk.TreeModel和/或数据库:

renderer.connect("edited", self.entry_edited);

def entry_edited(self, widget, path, text):
    self.listStore[path][number_of_row] = text;  # put the number_of_row to be edited

查看此教程以获取更多信息 Python GTK 3 教程 - CellRendererText


0

我发现我需要做一些微小的不同,但我也在使用Ubuntu的Quickly开发环境。我必须进入Glade并取消我的cellrenderer中的“可编辑”框,这样就会出现一个可切换的“Yes/No”按钮。然后我的代码看起来像:

#psuedo-code function definition
cellcolumn_widget.connect("edited", self.function, list_or_treestore, columnnumber)

#actual code, editing second column so column is passed as 1
self.builder.get_object("cellrenderer_chapter").connect("edited", self.cell_edited, self.builder.get_object("liststore_chapters"),1)

def cell_edited(self, widget, row, new_text, model, column):
    model.set_value(model.get_iter(row),column,new_text)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接