Pygtk 简明教程

PyGTK - SpinButton Class

SpinnButton 小组件通常称为 Spinner,它是一个 gtk.Entry 小组件,在右侧带有向上和向下箭头。用户可以直接在其中输入数值,也可以使用向上和向下箭头进行递增或递减。gtk.SpinButton 类继承自 gtk.Entry 类。它使用一个 gtk.Adjustment 对象,可使用该对象限制 spinner 中数值的范围和步长。

使用以下构造函数创建 SpinButton 小组件:

sp = gtk.SpinButton(adj, climb_rate, digits)

其中,adj 代表 gtk.Adjustment object controlling rangeclimb_rate 是一个加速度因子,digits 指定的小数位数。

gtk.SpinButton 类具有以下方法:

  1. SpinButton.set_adjustment() - 设置“adjustment”属性。

  2. SpinButton.set_digits() - 将“digits”属性设置为确定 spinbutton 显示的小数位数的值。

  3. SpinButton.set_increments(step, page) - 设置每次按下鼠标左键应用的增量和每次按下鼠标中键应用的增量。

  4. SpinButton.set_range() - 设置 spinbutton 的最小和最大允许值。

  5. SpinButton.set_value() - 以编程方式将 Spin Button 设置为新值。

  6. SpinButton.update_policy() - 有效值为 gtk.UPDATE_ALWAYS 和 gtk.UPDATE_VALID

  7. SpinButton.spin(方向, 增量=1) - 此操作会以指定方向对 Spinner 的值递增或递减。

以下是预定义的方向常量 -

gtk.SPIN_STEP_FORWARD

forward by step_increment

gtk.SPIN_STEP_BACKWARD

backward by step_increment

gtk.SPIN_PAGE_FORWARD

forward by step_increment

gtk.SPIN_PAGE_BACKWARD

backward by step_increment

gtk.SPIN_HOME

move to minimum value

gtk.SPIN_END

move to maximum value

gtk.SPIN_USER_DEFINED

将增量添加到值

  1. SpinButton.set_wrap() — 如果 wrap 为 True,则当超出了范围的上限或下限时,旋转按钮的值将反向环绕到相反的限制。

gtk.SpinButton 小组件会发出以下信号 -

change-value

当键盘操作更改 spinbutton 值时发出此信号。

input

当值更改时发出此信号。

output

当更改 spinbutton 显示值时发出此信号。如果处理程序成功设置文本且不需要进一步处理,则返回 True

value-changed

当更改任何更改 spinbutton 显示的设置时发出此信号。

wrapped

当 spinbutton 从其最大值环绕到最小值或反之亦然时会立即发出此信号。

Example

以下示例通过使用三个 SpinButton 小组件构造一个简单的 Date Selector 。Day Selector 应用了一个 Adjustment 对象将值限制在 1—31 之间。第二个选择器用于选择 1-12 月的月份数。第三个选择器选择 2000-2020 年的年份范围。

观察代码 −

import gtk

class PyApp(gtk.Window):

   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("SpinButton Demo")
      self.set_size_request(300, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      self.set_border_width(20)

      vbox = gtk.VBox(False, 5)
      hbox = gtk.HBox(True, 3)
      lbl1 = gtk.Label("Date")
      hbox.add(lbl1)

      adj1 = gtk.Adjustment(1.0, 1.0, 31.0, 1.0, 5.0, 0.0)
      spin1 = gtk.SpinButton(adj1, 0, 0)
      spin1.set_wrap(True)

      hbox.add(spin1)
      lbl2 = gtk.Label("Month")
      hbox.add(lbl2)

      adj2 = gtk.Adjustment(1.0, 1.0, 12.0, 1.0, 5.0, 0.0)
      spin2 = gtk.SpinButton(adj2, 0, 0)
      spin2.set_wrap(True)

      hbox.add(spin2)
      lbl3 = gtk.Label("Year")
      hbox.add(lbl3)

      adj3 = gtk.Adjustment(1.0, 2000.0, 2020.0, 1.0, 5.0, 0.0)
      spin3 = gtk.SpinButton(adj3, 0, 0)
      spin3.set_wrap(True)
      hbox.add(spin3)

      frame = gtk.Frame()
      frame.add(hbox)
      frame.set_label("Date of Birth")

      vbox.add(frame)
      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

执行后,以上代码将产生以下输出 -

spinbutton demo