PyGTK - SpinButton 类

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

SpinButton 小部件是使用以下构造函数创建的 −

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

这里的adj表示gtk.Adjustment对象的控制范围climb_rate是一个加速因子和小数位数指定的数字。

gtk.SpinButton 类有以下方法 −

  • SpinButton.set_adjustment() − 这将设置"adjustment"属性。

  • SpinButton.set_digits() − 这会将"digits"属性设置为确定微调按钮要显示的小数位数的值。

  • SpinButton.set_increments(step, page) − 这将设置每次按下鼠标左键时应用增量的步长值和每次按下鼠标中键时应用增量的页面值。

  • SpinButton.set_range() − 这会设置旋转按钮的最小和最大允许值。

  • SpinButton.set_value() − 这将以编程方式将微调按钮设置为新值。

  • SpinButton.update_policy() − 有效值为 gtk.UPDATE_ALWAYS 和 gtk.UPDATE_VALID

  • SpinButton.spin(direction, increment=1) − 这会在指定方向上增加或减少 Spinner 的值。

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

gtk.SPIN_STEP_FORWARD 按step_increment前进
gtk.SPIN_STEP_BACKWARD 按step_increment后退
gtk.SPIN_PAGE_FORWARD 按step_increment前进
gtk.SPIN_PAGE_BACKWARD 按step_increment后退
gtk.SPIN_HOME move to minimum value
gtk.SPIN_END 移动到最大值
gtk.SPIN_USER_DEFINED 增加值的增量
  • SpinButton.set_wrap() — 如果 wrap 为 True,当超出范围的上限或下限时,旋转按钮值环绕到相反的限制。

gtk.SpinButton 小部件发出以下信号 −

change-value 当旋转按钮的值被键盘操作改变时会被触发
input 当值改变时发出。
output 微调按钮显示值更改时发出。 如果处理程序成功设置文本并且不需要进一步处理,则返回 True
value-changed 当更改微调按钮显示的任何设置发生更改时会发出此消息。
wrapped 这是在旋转按钮从最大值到最小值换行后立即发出的,反之亦然。

示例

以下示例使用三个 SpinButton 小部件构建了一个简单的日期选择器。 日期选择器应用了 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 演示