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 range , climb_rate 是一个加速度因子,digits 指定的小数位数。
gtk.SpinButton 类具有以下方法:
-
SpinButton.set_adjustment() - 设置“adjustment”属性。
-
SpinButton.set_digits() - 将“digits”属性设置为确定 spinbutton 显示的小数位数的值。
-
SpinButton.set_increments(step, page) - 设置每次按下鼠标左键应用的增量和每次按下鼠标中键应用的增量。
-
SpinButton.set_range() - 设置 spinbutton 的最小和最大允许值。
-
SpinButton.set_value() - 以编程方式将 Spin Button 设置为新值。
-
SpinButton.update_policy() - 有效值为 gtk.UPDATE_ALWAYS 和 gtk.UPDATE_VALID
-
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 |
将增量添加到值 |
-
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()
执行后,以上代码将产生以下输出 -