tkinter -- OptionMenu
OptionMenu 为可选菜单,与 Combox 功能类似
创建 OptionMenu
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar(root)
v.set('python')
om = tk.OptionMenu(root, v, 'python', 'php', 'java', 'c', 'javascript')
om.pack()
root.mainloop()
结果:

显示的文本自动断行,上下行分别使用了左对齐,右对齐和居中对齐
OptionMenu 的创建需要两个必要的参数,与当前值绑定的变量,通常为一 StringVar 类型;另一个是提供可选的内容列表,由 OptionMenu 的变参数指定
设置 OptionMenu 的显示值
当 OptionMenu 与变量绑定后,直接使用变量赋值的方法即可改变当前的值
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar(root)
v.set('python')
# 创建一个OptionMenu控件
om = tk.OptionMenu(root, v, 'python', 'php', 'java', 'c', 'javascript')
om.pack()
print(v.get())
root.mainloop()
结果:

运行程序,OptionMenu 默认值为"python",打印出的数值也为"python"
如果设置的值不包含在当前的列表中,会是什么结果?如下的代码使用"Tkinter"来测试
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar(root)
v.set('tkinter')
# 创建一个OptionMenu控件
om = tk.OptionMenu(root, v, 'python', 'php', 'java', 'c', 'javascript')
om.pack()
print(v.get())
root.mainloop()
结果:

程序依旧是默认值改变为 Tkinter,打印结果也变为 Tkinter,但 Tkinter 不会添加到OptionMenu 的列表中,也就是说,当选择其它的选项时,Tkinter 的值会丢失
打印 OptionMenu 的值
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar(root)
v.set('tkinter')
def printoption(event):
print(v.get())
# 创建一个OptionMenu控件
om = tk.OptionMenu(root, v, 'python', 'php', 'java', 'c', 'javascript')
om.bind('<Button-1>', printoption)
om.pack()
root.mainloop()
结果:

每次点击 OptionMenu 程序打印出上次选中的项值
使用 list 作为 OptionMenu 的选项
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar(root)
Lang = ['python', 'php', 'java', 'c', 'javascript']
v.set('tkinter')
def printoption(event):
print(v.get())