欢迎光临
我们一起进阶

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

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章

Spinbox小部件是一个标准的Tkinter的Entry小窗口部件的变体,它可以用来选择一个固定的值.
当用户只需要从极少的数值中进行选择的时候,就可以使用Spinbox取代Entry。

语法:
这里是一个简单的语法来创建这个widget:

w = Spinbox( master, option, … )
参数:
master: 这代表了父窗口.

options: 下面是这个小工具最常用的选项列表。这些选项可以作为键 – 值对以逗号分隔.

方法:
spinbox对象有这些方法:

Methods & Description
delete(startindex [,endindex])
This method deletes a specific character or a range of text.
get(startindex [,endindex])
This method returns a specific character or a range of text.
identify(x, y)
Identifies the widget element at the given location.
index(index)
Returns the absolute value of an index based on the given index.
insert(index [,string]…)
This method inserts strings at the specified index location.
invoke(element)
Invokes a spinbox button.

同ListBox控件中的部分属性一样,有from_,to(表示范围),但有increment表示增量。

from Tkinter import *
root=Tk()

Spinbox(root,from_=-100,to=100,increment=2).pack()
root.mainloop()

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

from Tkinter import *
root=Tk()

# value是个元组,并且increment无论是多少不会再影响up或down的值只会依次按照元组中的数前后移动
Spinbox(root,value=(2,6,0,-8,9),increment=10).pack()
root.mainloop()

Spinbox绑定变量
from Tkinter import *
root=Tk()
v=StringVar()
v1=StringVar()
# value是个元组,并且increment无论是多少不会再影响up或down的值
Spinbox(root,value=(2,6,0,-8,9),increment=10,textvariable=v).pack()
v.set(9)
Spinbox(root,value=(2,6,0,-8,9),increment=10,textvariable=v1).pack()
# 设置的值不在value元组中,但是7占据第一个索引位置,up一下显示的是6,但实际上7未在元组中在down下显示的是2
v1.set(7)
root.mainloop()

from Tkinter import *
root=Tk()

v=IntVar()

La=Label(root,width=5,fg='blue')
La.config(textvariable=v,width=3)
Entry(root,textvariable=v,width=3).pack()
La.pack()

Spinbox(root,from_=-100,to=100,increment=2,textvariable=v).pack()

root.mainloop()

知识点:获取部分控件中文本值的方法。

text    要显示的文本

textvariable    变量文本

绑定的变量可以通过textvariable或text属性传递给其他控件作为文本显示,并且是动态的。
如Lable控件中只能是textvariable属性获得动态的文本,Entry可以是text或textvariable属性。

get()可以获得控件中文本值,但不能传递给text或textvariable属性给其他控件???

设置Spinbox的回调函数

from Tkinter import *
root=Tk()

v=IntVar()

def Call():
print Sp.get()

#使用绑定变量获取
Label(root,textvariable=v,width=3).pack()
#Label(root,text=v,width=6).pack()

Entry(root,textvariable=v,width=3).pack()
Entry(root,text=v,width=3).pack()
Sp=Spinbox(root,from_=-100,to=100,increment=2,textvariable=v,command=Call)
Sp.pack()

#使用对象获取
Label(root,textvariable=Sp.get(),width=3).pack()
# Label(root,text=Sp.get(),width=6).pack()

Entry(root,textvariable=Sp.get(),width=3).pack()
Entry(root,text=Sp.get(),width=3).pack()

root.mainloop()

删除Spinbox指定位置的字符
def delete(self, first, last=None):

删除spinbox的一个或多个元素。

首先是要删除的第一个字符的索引,最后是字符的索引。

最后一个删除。如果最后没有指定它。

默认值为first +1,即单个字符。

删除。这个命令返回一个空字符串。

return self.tk.call(self._w, ‘delete’, first, last) 很奇诡的一种方法:
当Spinbox中的初始值是1234,对象delete(0–3)对应着数字1234的索引,若delete(0),up一下,值变为235,delete(1),up一下,值变为135.

若delete(0)两下,则会在原来的数字上增加,不改变位数,即1234,up后1235,但是初始值是34?????

from Tkinter import *

root = Tk()

sb = Spinbox(root,
from_=1234, # 最小值
to=2000, # 最大值
increment=1
)
sb.delete(0)
sb.delete(0)
print sb.get()
sb.pack()
root.mainloop()

使用元组value给定值时:

from Tkinter import *
root = Tk()

def Call():
sb.delete(0)
print sb.get()

sb = Spinbox(root,
from_=1234, # 最小值
to=2000, # 最大值
increment=1,
value=(232,4345,2126,42357,4323),
command=Call
)

sb.pack()
root.mainloop()


输出:

345
126
2357
323
323

在Spinbox指定位置插入文本

insert()方法
from Tkinter import *
root = Tk()

def Call():
sb.insert(END,'.0')
print sb.get()

sb = Spinbox(root,
from_=1234, # 最小值
to=2000, # 最大值
increment=1,

command=Call
)

sb.pack()
root.mainloop()


输出:
1235.0
1236.0
1237.0
1238.0
1239.0
1240.0 .....

delete与insert是针对每个值中的字符,但是容易出现问题

赞(1) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏