使用Glade在Gtk树视图中创建具有可编辑单元格的列

时间:2010-06-29 17:40:16

标签: gtk glade

我正在尝试使用包含样本的x和y坐标的表创建一个简单的GUI。我使用treeview,我希望用户可以编辑表格的单元格。是否有可能指定单元格是否应该直接在celllederer属性中的Glade中编辑,或者我是否必须在我的代码中指定它?我使用Glade 3.6.1

我刚刚在编辑我的树视图时发现树视图编辑器中的未编辑框“可编辑”,这使我能够指定单元格是否可编辑,因为如果框未被选中,则单元格可编辑属性为no更长时间与模型连接。 但是如果我运行程序,单元格是可编辑的,但我写的内部值消失了。我该如何解决这个问题?为什么单元格不存储我输入的值?

感谢任何提示

3 个答案:

答案 0 :(得分:3)

对于任何处理类似问题的人,我已经解决了 - 无论何时编辑单元格,都需要更改模型中的相应记录,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 :(得分:0)

我发现我必须做一些不同的事情,但我也在使用Ubuntu的Quickly开发环境。我确实必须进入Glade并取消选中我的cellrenderer中的“可编辑”框,然后提出一个可切换的“是/否”按钮。然后我的代码看起来像:

#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)

答案 2 :(得分:0)

对于 python GTK,默认情况下,Gtk.CellRendererText 小部件中的文本不可编辑,您可以通过将“editable”属性的值设置为 True 来更改此:

renderer = Gtk.CellRendererText();
renderer.set_property("editable", True);

然后您可以连接到“已编辑”信号并相应地更新您的 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 tutorial - CellRendererText