tkinter -- Spinbox

发布时间:2018-06-04 21:24:16编辑:Run阅读(3797)

    与Entry 类似,但可以指定输入范围值

    创建一个Spinbox

    代码:

    import tkinter as tk
    root = tk.Tk()
    # root.geometry('200x100')
    tk.Spinbox(root).pack()
    root.mainloop()

    结果:

    blob.png

    只是创建了一个 Spinbox,其它的什么也做不了,与 Scale 不同,Scale 使用缺省值就可以控制 值的改变



    设置 Spinbox 的最大、最小值和步距值

    代码:

    import tkinter as tk
    root = tk.Tk()
    tk.Spinbox(root,
               from_=0,  # 设置最小值
               to=100,   # 设置最大值
               increment=5,  # 设置增量值为5,这个与 Scale 的 resolution 意思相同
               ).pack()
    root.mainloop()

    结果:

    blob.png



    设置 Spinbox 的值,设置属性 values,设置此值后,每次更新值将使用 values 指定的值

    代码:

    import tkinter as tk
    root = tk.Tk()
    sp = tk.Spinbox(root,
               values=(0, 2, 20, 40, -1),
               increment=2,  # 设置增量值为2,这个与 Scale 的 resolution 意思相同
               )
    sp.pack()
    # 打印当前的spinbox的值,一个元组(tuple)类型
    print(sp['values'])
    root.mainloop()

    结果:

    blob.png

    显示的第一个值为0,up 按钮则为2,20,40,-1,不再是增2操作,它会使用 tuple 的索引递增,至到 tuple 的最后一个项时,将不再增加,至到 tuple 的最后一个项时,将不再增加

    down 按钮与 up 按钮恰好相反,它使用 tuple 的索引递减



    Spinbox 绑定变量

    代码:

    import tkinter as tk
    root = tk.Tk()
    v = tk.StringVar()
    sp = tk.Spinbox(root,
               values=(0, 2, 20, 40, -1),
               increment=1,  # 设置增量值为1,这个与 Scale 的 resolution 意思相同
               textvariable=v,
               )
    
    # 设置初始值为20
    v.set(20)
    print(v.get())
    sp.pack()
    # 打印当前的spinbox的值,一个元组(tuple)类型
    print(sp['values'])
    root.mainloop()

    结果:

    blob.png

    上面的代码将变量 v 与 sb 绑定,并将 Spinbox 的初始值设置为20,运行程序,Spinbox 的值显示为20,再点击 up 按钮,此时值变为40




    再看下面的代码,与这个不同的是设置的值不包含在 tuple 之内

    代码:

    import tkinter as tk
    root = tk.Tk()
    v = tk.StringVar()
    sp = tk.Spinbox(root,
               values=(0, 2, 20, 40, -1),
               increment=1,  # 设置增量值为1,这个与 Scale 的 resolution 意思相同
               textvariable=v,
               )
    
    # 设置初始值为200
    v.set(200)
    print(v.get())
    sp.pack()
    # 打印当前的spinbox的值,一个元组(tuple)类型
    print(sp['values'])
    root.mainloop()

    效果:

    blob.png

    运行程序,显示的值为200,再次点击 up 按钮,显示的值为0,即虽然 Spinbox 能将值显示出来,但并不会将200添加到变量中,此时的索引值依旧为0,因为没有找到200的项。当点击 up 时,索引值变为1,即显示的值为2



    设置 Spinbox 的回调函数

    代码:

    import tkinter as tk
    root = tk.Tk()
    def printspin():
        print('Spinbox')
    
    sp = tk.Spinbox(root,
               from_=0,  # 最小值
               to=10,  # 最大值
               increment=1,  # 设置增量值为1,这个与 Scale 的 resolution 意思相同
               command=printspin,  # 回调函数
               )
    
    sp.pack()
    root.mainloop()

    结果:

    blob.png

    每次点击 Spinbox 按钮时就会调用 printSpin 函数,打印出'Spinbox'。与 Scale 不同的是:它不需要参数




    打印 Spinbox 的当前内容,是显示的值,不是 values 的值

    代码:

    import tkinter as tk
    root = tk.Tk()
    def printspin():
        # 使用get()方法来得到当前的显示值
        print(sp.get())
    
    sp = tk.Spinbox(root,
               from_=0,  # 最小值
               to=10,  # 最大值
               increment=1,  # 设置增量值为1,这个与 Scale 的 resolution 意思相同
               command=printspin,  # 回调函数
               )
    
    sp.pack()
    root.mainloop()

    结果

    blob.png

    每次点击 Spinbox 按钮时就会调用 printSpin 函数,打印出 Spinbox 的当前值



    删除 Spinbox 指定位置的字符

    代码:

    import tkinter as tk
    root = tk.Tk()
    def printspin():
        sp.delete(0)
        print(sp.get())
    
    sp = tk.Spinbox(root,
               values=(123456789,23456789,3456789,456789,56789,6789,789,89,9),
               increment=0,  # 设置增量值为0,这个与 Scale 的 resolution 意思相同
               command=printspin,  # 回调函数
               )
    
    sp.pack()
    root.mainloop()

    效果:

    444.gif




    在 Spinbox 指定位置插入文本

    代码:

    import tkinter as tk
    root = tk.Tk()
    def printspin():
        sp.insert(tk.END, '.00')
        print(sp.get())
    
    sp = tk.Spinbox(root,
               from_=1234,   # 最小值
               to=9999,  # 最大值
               increment=1,  # 设置增量值为1,这个与 Scale 的 resolution 意思相同
               command=printspin,  # 回调函数
               )
    
    sp.pack()
    root.mainloop()

    效果:

    444.gif

    每次点击 Spinbox 按钮时就会调用 printSpin 函数,当前的显示值均添加了两个有数字".00"

关键字

上一篇: tkinter -- Scale

下一篇: tkinter -- Scrollbar