Tkinter教程之Spinbox篇

原创 2007年10月04日 18:56:00
'''Tkinter教程之Spinbox篇'''
#与Entry类似,但可以指定输入范围值
'''1.创建一个Spinbox'''
from Tkinter import *
root 
= Tk()
Spinbox(root).pack()
root.mainloop()
#只是创建了一个Spinbox,其它的什么也做不了,与Scale不同,Scale使用缺省值就可以控制 值的改变。

'''2.设置Spinbox的最大、最小值和步距值'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
Spinbox(root,
        from_ 
= 0,      #设置最小值
        to = 100,       #设置最大值
        increment = 5   #设置增量值为5,这个与Scale的resolution意思相同
        ).pack()
root.mainloop()
'''3.设置Spinbox的值,设置属性values,设置此值后,每次更新值将使用values指定的值,'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
sb 
= Spinbox(root,
             values 
= (0,2,20,40,-1),
             increment 
= 2
             )
sb.pack()
# 打印当前的Spinbox的值,为一tuple
print sb['values']
root.mainloop()
#显示的第一个值为0,up按钮则为2,20,40,-1,不再是增2操作,它会使用tuple的索引递增,至到tuple的最后一个项时,将不再增加;
#
down按钮与up按钮恰好相反,它使用tuple的索引递减

'''4.Spinbox绑定变量 '''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
= StringVar()
sb 
= Spinbox(root,
             values 
= (0,2,20,40,-1),
             increment 
= 2,
             textvariable 
= v
             )
v.set(
20)
print v.get()
sb.pack()
# 打印当前的Spinbox的值,为一tuple
root.mainloop()
#上面的代码将变量v与sb绑定,并将Spinbox的初始值设置为20,运行程序,Spinbox的值显示为20,再点击up按钮,此时值变为40,
#
即tuple的下一个值,再看下面的代码,与这个不同的是设置的值不包含在tuple之内
#
 -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
= StringVar()
sb 
= Spinbox(root,
             values 
= (0,2,20,40,-1),
             increment 
= 2,
             textvariable 
= v
             )
v.set(
200)
print v.get()
sb.pack()
# 打印当前的Spinbox的值,为一tuple
root.mainloop()
#运行程序,显示的值为200,再次点击up按钮,显示的值为2,即虽然Spinbox能将值显示出来,但并不会将200添加到变量中,此时的
#
索引值依旧为0,因为没有找到200的项。当点击up时,索引值变为1,即显示的值为2。
'''5.设置Spinbox的回调函数'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    
print 'Spinbox'
sb 
= Spinbox(root,      
             from_ 
= 0,         #最小值
             to = 10,           #最大值
             command = printSpin#回调函数
             )

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

'''6.打印Spinbox的当前内容,是显示的值,不是values的值。'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    
# 使用get()方法来得到当前的显示值
    print sb.get()
sb 
= Spinbox(root,      
             from_ 
= 0,         #最小值
             to = 10,           #最大值
             command = printSpin#回调函数
             )

sb.pack()
root.mainloop()
#每次点击Spinbox按钮时就会调用printSpin函数,打印出Spinbox的当前值。

'''7.删除Spinbox指定位置的字符(这是个有问题的程序)'''
#在回调函数中使用delete,Spinbox初始值为1234,点击up一次Spinbox的值变为235,再次点击变为36,再次点击变为7,但实际执行结果
#
为第一次点击235,再次点击为234,以后所有的点击操作均为此值。不知为何。
#
 -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    sb.delete(0)
    
print sb.get()
 
sb 
= Spinbox(root,      
             from_ 
= 1234,         #最小值
             to = 9999,           #最大值
             increment = 1,
             command 
= printSpin#回调函数
             )
sb.pack()
root.mainloop()

# 如果不使用回调函数,两次调用delete则可以正常,工作如下代码:
#
 -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
 
sb 
= Spinbox(root,      
             from_ 
= 1234,      #最小值
             to = 9999,         #最大值
             increment = 1
             )
sb.delete(0)
sb.delete(0)
print sb.get()
sb.pack()
root.mainloop()
#此程序正常,可以打印出正确结果'34'

'''关于delete回调函数异常问题,又使用如下代码作了实验'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    
# 使用delete()方法删除指定索引的字符
    sb.delete(0)
    
print sb.get()
sb 
= Spinbox(root,
             values 
= (1234,234,34,4),
             command 
= printSpin
             )
sb.pack()
root.mainloop()
#则这个程序点击up可以打印出34,再次点击则为空。
'''
这个是可以工作的:①当前的值为1234,②点击up按钮时,程序调用回调函数printSpin将Spinbox的当
前值变为234;③Spinbox查找值为234的项,得到索引为1,即当前的索引值变为1,up还会将索引增1,即变为2,所有显示的值
为34,为了更好理解,用如下代码再次测试:
'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    
# 使用delete()方法删除指定索引的字符
    sb.delete(0)
    
print sb.get()
sb 
= Spinbox(root,
             values 
= (1234567890,234567890,34567890,4567890,567890,
                       
67890,7890,890,90,0),
             command 
= printSpin    #回调函数
             )
sb.pack()
root.mainloop()
#这个程序显示的依次是1234567890,34567890,567890,7890,90。
#
还不了解内部工作原理,先这样理解吧,使用delete时注意可能会出现这样的问题。


'''8.在Spinbox指定位置插入文本'''
#在每项后面添加.00表示精度,同样使用回调函数实现,代码如下:
#
 -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    
# 使用get()方法来得到当前的显示值
    sb.insert(END,'.00')
    
print sb.get()
 
sb 
= Spinbox(root,      
             from_ 
= 1234,         #最小值
             to = 9999,           #最大值
             increment = 1,
             command 
= printSpin#回调函数
             )
sb.pack()
root.mainloop()
#每次点击Spinbox按钮时就会调用printSpin函数,当前的显示值均添加了两个有数字".00"。这个与delete不同,倒是可以正确显示。
'''
delete所遇到的问题,insert真的就不会发生吗?再次对上面的代码进行测试,代码如下:
'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
def printSpin():
    
# 使用get()方法来得到当前的显示值
    sb.insert(END,'0')
    
print sb.get()
 
sb 
= Spinbox(root,      
             from_ 
= 1234,          #最小值
             to = 9999,             #最大值
             increment = 1,
             command 
= printSpin    #回调函数
             )
sb.pack()
root.mainloop()
#在每个项的后加一个0,即将值变为原来的10倍,则程序的输出结果为123450,99990,同样也出现了异常
#
现象,第一个例子的中出现正确的情况纯粹是个偶然,在整数的后添加.00相当于没有对其值进行改变,故下次
#
使用的值依旧没有变化。

#author:     jcodeer
#
blog:    jcodeer.cublog.cn
#
email:    jcodeer@126.com
 

相关文章推荐

Python Tkinter Spinbox控件

Spinbox是从标准Tkinter 控件Entry中演变而来的,可以用来从一系列的值中选择合适的值。 当用户只需要从极少的数值中进行选择的时候,就可以使用Spinbox取代Entry。 Spinbo...

Python GUI 09----Spinbox

1.创建一个Spinbox from tkinter import * root = Tk() Spinbox(root).pack() root.mainloop() 2.设置Spinbox的最...

Python GUI进阶(ttk)—让界面变得更美

上一篇介绍的GUI界面有以下两个较大的缺点: 1、界面比较丑陋,控件种类有限。 2、界面布局逻辑性差。 针对以上两个缺点,引入Tkinter 中的ttk组件。...

Python tkinter label 更新

网上看的两个例子关于tkinter界面更新的,简单易懂,分享一下。 例子_1: 代码_1: from tkinter import Tk, Checkbutton, Label from tk...

Tkinter--GUI布局

#-*- coding: utf-8 -*- """ Tkconstants.py -- 常量类 Tkinter布局 pack 参数说明 fill -- x 横向填充(默认,各组...
  • xxb2008
  • xxb2008
  • 2014年05月14日 12:52
  • 2774

Tkinter教程之Font篇

'''Tkinter教程之Font篇''' # Tkinter中其它常用的一些功能 '''1.字体使用''' # -*- coding: utf-8 -*- # 改变组件的显示字体 from tkin...

Tkinter教程之Frame篇

'''Tkinter教程之Frame篇''' # Frame就是屏幕上的一块矩形区域,多是用来作为容器(container)来布局窗体。 '''1.创建Frame''' # -*- coding: u...

Tkinter教程之Button篇

文章转载自:http://blog.csdn.net/jcodeer/article/details/1811298 # Tkinter教程之Button篇(1) # Button功能触发事...

Tkinter教程之Scale篇

'''Tkinter教程之Scale篇''' # Scale为输出限定范围的数字区间,可以为之指定最大值,最小值及步距值 '''1.创建一个Scale''' from tkinter import *...

Tkinter教程之Checkbutton篇

# Tkinter教程之Checkbutton篇 # Checkbutton又称为多选按钮,可以表示两种状态:On和Off,可以设置回调函数,每当点击此按钮时回调函数被调用 '''1.一个简单的Che...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tkinter教程之Spinbox篇
举报原因:
原因补充:

(最多只允许输入30个字)