::-- ehu4ever [2005-08-10 12:59:15]

1. 左顾右盼、瞻前顾后

GTK中有很多的widget是可以用鼠标和键盘操作来改变外观的,比如后面要说到range。也有一些widget在显示大块的数据时,可以根据一些属性自动地作出调整。

当我们对range进行操作的时候,程序的界面当然会有相应的变化。可行的方法就是当一个widget的adjustment改变的时候,它发出自己的“事件”信号,或是给callback传入一个新的数据,又或是让callback自己查看widget的某一个(或多个)属性。不决定怎样改变这个widget的外观。

但是我们也可以多个widget的adjustment组合起来,这样,在我改变其中某一个widget的外观时,其它的几个也会跟着改变。一个典型的例子是将scrollba和一个panning viewport或者是一个scrolling text area的adjustment组合在一起。如果每个widget都用自己的方式管理adjustment的值,那么编程的时候就得自己在各个widget之间传递adjustment的值。

对于这个难题,GTK的解决方法是Adjustment,它不是一个widget而是让多个widget可以灵活地保存和共享adjustment。Adjustment的一个常见的用途是保存scrollbars和scale这样的widget的各种参数的值。另外,由于Adjustment继承了Object,所以它有一些特别的能力。其中最重要的,是也可以发出各种“事件信号”,这样对这些“事件信号”进行一些事件处理,或是用来在多个widget之间传递adjustment信息。

之后,让我们来看看adjustment和几个widget的配合使用:Progress Bars、Viewports、 Scrolled Windows等等。

adjustment在很多widget中的使用时都是会自动建立的,但有时候,比如下面的例子,我们只能自己建立一个gtk.Adjustment。

  adjustment = gtk.Adjustment(value=0, lower=0, upper=0, step_incr=0, page_incr=0, page_size=0)

value是传给adjustment的初始值,通常是和一个widget的左上角位置相对应的。lower是adjustment的最小值。step_incr和page_incr是adjustment一次变化的值。The page_size argument usually corresponds somehow to the visible area of a panning widget.upper是panning的子widget的右下角的位置。Therefore it is not always the largest number that value can take, since the page_size of such widgets is usually non-zero.

pygtk_creatingadj (last edited 2009-12-25 07:16:00 by localhost)