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...
  • wangyiyan315
  • wangyiyan315
  • 2013年11月19日 10:24
  • 3410

Python GUI 09----Spinbox

1.创建一个Spinbox from tkinter import * root = Tk() Spinbox(root).pack() root.mainloop() 2.设置Spinbox的最...
  • a359680405
  • a359680405
  • 2015年04月17日 08:43
  • 2068

Python的GUI编程(七)Spinbox(自设值)

Spinbox小部件是一个标准的Tkinter的Entry小窗口部件的变体,它可以用来选择一个固定的值. 当用户只需要从极少的数值中进行选择的时候,就可以使用Spinbox取代Entry。 ...
  • m0_37264397
  • m0_37264397
  • 2018年01月17日 20:10
  • 66

QT5——SpinBox、Double SpinBox 和Slider

SpinBox、DoubleSpinBox、Slider三个控件的基本介绍不在这儿细讲,网上有很多相关的概念,这篇文章主要介绍,三者之间的信号槽设置。 首先创建Qt5的Gui项目, 如图:为了然后...
  • zxgdll
  • zxgdll
  • 2017年03月07日 15:54
  • 3214

Qt之QSpinBox类

一、以下为QSpinBox类的部分功能的实现代码: #include #include int main(int argc,char **argv) { QApplic...
  • houchuanwang
  • houchuanwang
  • 2011年08月14日 21:13
  • 17434

QtitanRibbon:Qt类跨平台Ribbon UI组件—介绍

QtitanRibbon组件实现了Microsoft Ribbon for Qt的概念,设计用于任何使用Qt开发的商业应用。这个组件和Qt一道为获取一些应用提供了一个难得的机会,这些应用在全球三大主要...
  • ifeng12358
  • ifeng12358
  • 2017年01月12日 10:45
  • 2681

Spinbox 实例

Spinbox  - from_   配置起点值  - to         配置终点值  - textvariable 绑定变量  - values  绑定列表,接受字符串列表  - wr...
  • sofeien
  • sofeien
  • 2015年10月28日 17:18
  • 365

Tkinter教程之Spinbox篇

Tkinter教程之Spinbox篇#与Entry类似,但可以指定输入范围值1.创建一个Spinboxfrom Tkinter import *root = Tk()Spinbox(root).pac...
  • jcodeer
  • jcodeer
  • 2007年10月04日 18:56
  • 3782

鱼c笔记——Python的GUI编程(十三):Tkinter的组件Spinbox

组件Spinbox(Tk8.4新增)Spinbox组件是Entry组件(能让用户随意的输入数据)的变体,用于从一些固定的值(可以是连续的,也可以是一些字符串的组合)中选取一个。何时使用Spinbox组...
  • sinat_41104353
  • sinat_41104353
  • 2018年02月12日 16:23
  • 18

Tkinter教程之Canvas篇(3)

Tkinter教程之Canvas篇(3)16.移动item# -*- coding: cp936 -*-# move指定x,y在偏移量from Tkinter import *root = Tk()#...
  • jcodeer
  • jcodeer
  • 2007年10月05日 12:59
  • 5014
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tkinter教程之Spinbox篇
举报原因:
原因补充:

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