• 18
  • Nov

好久没写技术文章了,直到编程时才知道,自己对GTK+还有一大堆不知道的东西。

好吧,从今开始尽量多做笔记!

在写Ubuntu Tweak的一个新功能时,用到了Gtk.TreeView,其中列(TreeViewColumn)塞了两个Cell(一个CellRenderText,一个CellRenderButton)。

我想要在Button的范围内(如图框2)按下鼠标,然后触发相关事件。看似简单,却出问题了。

列的选中是全局性的,我选中一行时(无论我的鼠标是放在1处,还是2处),按键按下的动作就被触发了(这实际上是我自定义的CellRenderButton写的不完美的原因)。

那么如何在不改写CellRenderButton的情况下,在选中行时而且单击Text区域(如图框1)时,不触发Activation事件呢?只有在单击Button区域时会触发(如图框2)

Ubuntu Tweak 0.4.99999

我研究了一下,发现给Cell设置Mode就可以了。

默认情况下,GTK的Cell有三种模式:

gtk.CELL_RENDERER_MODE_INERT

gtk.CELL_RENDERER_MODE_ACTIVATABLE

gtk.CELL_RENDERER_MODE_EDITABLE

第一种,表示不交互模式,也说是说Cell只用来显示,交互相关的可能会被同行的其他Cell所触发(也就是前面问题所在)

第二种,表示可交互,也就是会接受点击事件。这种模式使得只要你光标在其范围内,事件就会被其所接收。

第三种,表示可编辑,除了一次点击事件可以选中该列外,再选中状态再点击一次,就可以触发编辑事件了。

我只要Text区域能接受点击,从而不会让Button区域覆盖整条Cell,理所当然的,就给TextCell设置了第二种模式:gtk.CELL_RENDERER_MODE_ACTIVATABLE,终于达到了我的要求。

BTW:图中也透露了Ubuntu Tweak 0.5将增加的一个新功能,你知道这是什么吗?

Tags: GTK, Ubuntu Tweak.

» You can leave a comment.

7 Comments

  1. 占座。老大,给我做个链接吧。

  2. 恩,我喜欢技术文,哈哈。。。

  3. xinzhi

    移植Synaptic(PM)的任务组安装软件功能。

  4. 2unc

    你的docky是怎么弄成白的?还有它默认的图标

  5. 哇,期待的内容来了。这样安装组服务就方便了,哈哈!!!

  6. Dig

    新功能是成套地装软件?

Leave a Comment