PyGTK:双击CellRenderer

2 投票
1 回答
1781 浏览
提问于 2025-04-15 22:38

在我的PyGTK应用程序中,我现在使用'editable'来让单元格可以编辑。但是因为我的单元格内容有时候真的很大,所以我想在用户双击单元格时,弹出一个新窗口让他们进行修改。不过我找不到如何在特定的单元格渲染器上处理双击事件。我不想编辑整行,也不想为整行设置这个回调,只想针对那些可能内容过长的列。请问我该如何使用CellRendererText()或者类似的东西来实现这个功能。

我现在生成单元格的代码是:

cols[i] = gtk.TreeViewColumn(coltitle)
cells[i] = gtk.CellRendererText()
cols[i].pack_start(cells[i])
cols[i].add_attribute(cells[i], 'text', i)
cols[i].set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
cols[i].set_fixed_width(100)
cells[i].set_property('editable', True)
cells[i].connect('edited', self.edited, (i, ls))
cols[i].set_resizable(True)
mytreeview.append_column(cols[i])

谢谢!

1 个回答

4

我觉得这直接是做不到的。不过,你可以在 gtk.TreeView 上连接到 button-press-event 这个事件。然后,当 event.type 等于 gtk.gdk._2BUTTON_PRESS 时,你可以用 gtk.TreeView.get_path_at_pos()xy 转换成树形结构中的位置。这样就能返回一个树路径,告诉你点击的是哪一行,还有一个 gtk.TreeViewColumn 对象,表示你点击的是哪一列。

撰写回答