tkinter 9 optionMenu
Reference
- http://effbot.org/tkinterbook/optionmenu.htm
- http://bbs.fishc.com/thread-61338-1-1.html
简介
optionmenu就是下拉菜单的一个改版,但是他的发明弥补了Listbox(列表框)无法实现下拉列表框的遗憾,因为创建一个选择菜单的效果和创建下拉列表框的效果是一样的。
注意:它只能用做单选,没有Listbox灵活。该组件是从Menubutton继承来的。
属性
- OptionMenu(master, variable, value, *values, **kwargs)
- master指定父组件
- variable用来绑定Tkinter变量,自动更新/获取组件的值
- value/values,用来设置该组件的选项的值
实例 1 基本使用
def test(master=None):
main_w = LabelFrame(master,
text="Basic Info",
fg='red')
main_w.pack()
frm1 = Frame(main_w)
frm1.pack(fill=X, side=TOP)
frm2 = Frame(main_w)
frm2.pack(fill=X, side=TOP)
# 1. 第一个OptionMenu with attribute settings
Label(frm1, text='Favorite: ').pack(side=LEFT, anchor='nw')
v = StringVar()
v.set("JavaScript") # 注意这个值,几乎决定了OptionMenu的长度。小TICK:把初值设置为最长的
om = OptionMenu(frm1,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack(side=LEFT, anchor='nw')
# 2. 第一个OptionMenu initialized with list/tuple
Label(frm2, text='County:').pack(side=LEFT, anchor='nw')
option = ['China', "USA", "UK", "Canada", "Singapore"]
var = StringVar()
# 小trick,自动把初值设置为最长的项
x = [len(y) for y in option] # 先获得各项的长度
init_value = option[x.index(max(x))]
var.set(init_value)
om2 = OptionMenu(frm2, var, *option)
om2.pack(side=LEFT, anchor='nw')
# 3. 显示/获取OptionMenu的值
Label(master, textvariable=v, bg='black', fg='red').pack(fill=X, side=TOP, anchor='nw')
Label(master, textvariable=var, bg='green', fg='red').pack(fill=X, side=TOP, anchor='nw')
print("Favorite Programming Language is \"%s\"" % v.get())
print("Come from '%s'" % var.get())
实例 2
def test2(master=None):
Lang = ['Python', 'PHP', 'CPP', 'C', 'Java', 'JavaScript', 'VBScript']
v = StringVar(root)
v.set('Tkinter')
def printOption(event):
print(v.get())
# 创建一个OptionMenu控件,使用了apply函数
# om = apply(OptionMenu, (root, v) + tuple(Lang))
om = OptionMenu(master, v, *Lang)
# 事件绑定 (少用)
# 每次点击OptionMenu程序打印出上次选中的项值
om.bind('<Button-1>', printOption)
om.pack()