- 18
- Nov
好久没写技术文章了,直到编程时才知道,自己对GTK+还有一大堆不知道的东西。
好吧,从今开始尽量多做笔记!
在写Ubuntu Tweak的一个新功能时,用到了Gtk.TreeView,其中列(TreeViewColumn)塞了两个Cell(一个CellRenderText,一个CellRenderButton)。
我想要在Button的范围内(如图框2)按下鼠标,然后触发相关事件。看似简单,却出问题了。
列的选中是全局性的,我选中一行时(无论我的鼠标是放在1处,还是2处),按键按下的动作就被触发了(这实际上是我自定义的CellRenderButton写的不完美的原因)。
那么如何在不改写CellRenderButton的情况下,在选中行时而且单击Text区域(如图框1)时,不触发Activation事件呢?只有在单击Button区域时会触发(如图框2)
我研究了一下,发现给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将增加的一个新功能,你知道这是什么吗?

占座。老大,给我做个链接吧。
期待 1.0 - -||
恩,我喜欢技术文,哈哈。。。
移植Synaptic(PM)的任务组安装软件功能。
你的docky是怎么弄成白的?还有它默认的图标
哇,期待的内容来了。这样安装组服务就方便了,哈哈!!!
新功能是成套地装软件?