Tkinter库的学习记录13-OptionMenu与Combobox

Tkinter库的学习记录13-OptionMenu与Combobox 13、OptionMenu与Combobox13-1 下拉式列表OptionMenuOptionMenu可以翻译为下拉式列表用户可以从中选择一项它的构造方法如下。OptionMenu(父对象, options, *value)其中*value是一系列下拉列表本节将通过实例进行讲解。13-1-1 建立基本的OptionMenu下面程序实例ch13_1建立OptionMenu这个下拉列表中有三个数据分别是Python、Java、C。from tkinter import * root Tk() root.title(ch13_1) root.geometry(300x180) var StringVar(root) optionmenu OptionMenu(root, var, Python, Java, C) optionmenu.pack() root.mainloop()执行结果 程序执行时OptionMenu中是空的这是因为没有选择任何选项。选择任一项后选项会更改。可以留意上述第8行建立OptionMenu下拉列表项目的方式。13-1-2 使用元组建立列表项目上述程序虽然可以建立列表但是当列表中项目较多时不是很方便不过我们可以将列表项目建在元组内再将元组数据放入OptionMenu()构造方法内。下面程序实例ch13_2重新设计ch13_1使用元组存储列表项目。from tkinter import * root Tk() root.title(ch13_2) root.geometry(300x180) omTuple (Python, Java, C) var StringVar(root) optionmenu OptionMenu(root, var, *omTuple) # 创建OptionMenu optionmenu.pack() root.mainloop()执行结果 与ch13_1相同13-1-3 建立默认选项set()到目前程序刚执行时没有看到任何项目不过我们可以使用set()方法为这个OptionMenu建立默认选项。程序实例ch13_3重新设计ch13_2使用set()方法建立默认选项。from tkinter import * root Tk() root.title(ch13_3) root.geometry(300x180) omTuple (Python, Java, C) var StringVar(root) var.set(omTuple[0]) optionmenu OptionMenu(root, var, *omTuple) # 创建OptionMenu optionmenu.pack() root.mainloop()执行结果13-1-4 获得选项内容get()可以使用get()方法获得选项内容。程序实例ch13_4获得OptionMenu目前选项的内容这个程序中提供了Print按钮单击此按钮可以在Python Shell窗口中列出所选的内容。from tkinter import * def printSelection(): print(The selection is: var.get()) root Tk() root.title(ch13_4) root.geometry(300x180) omTuple (Python, Java, C) var StringVar(root) var.set(omTuple[0]) optionmenu OptionMenu(root, var, *omTuple) # 创建OptionMenu optionmenu.pack(pady10) btn Button(root, textPrint, commandprintSelection) btn.pack(pady10, anchorS, sideBOTTOM) root.mainloop()执行结果Python Shell打印了The election is: Python13-2 组合框ComboboxCombobox可以翻译为组合框这是tkinter.ttk的Widget控件它的特性与OptionMenu类似可以说它是Entry和下拉菜单的组合。它的构造方法如下。Combobox(父对象, options)常用的options参数如下。(1) textvariable可以设置Combobox的变量值。(2) valueCombobox的选项内容内容以元组方式存在。13-2-1 建立Combobox在Combobox()构造方法中可以使用value参数建立选项内容。程序实例ch13_5建立一个Combobox。from tkinter import * from tkinter.ttk import * root Tk() root.title(ch13_5) root.geometry(300x120) var StringVar() cb Combobox(root, textvariablevar, value(Python, Java, C#, C)) cb.pack() root.mainloop()执行结果其实在设计上述程序时若是选项很多Combobox()方法的参数value一般是独立在Combobox()处处理可以参考下列实例。程序实例ch13_6将Combobox的选项独立处理可以参考第10行。from tkinter import * from tkinter.ttk import * root Tk() root.title(ch13_6) root.geometry(300x120) var StringVar() cb Combobox(root, textvariablevar) cb[values] (Python, Java, C# C) cb.pack() root.mainloop()执行结果 与上面相同。13-2-2 设置默认选项current()Combobox创建完成后可以使用current()方法建立默认选项。下面程序实例设置元组索引0的元素Python为默认选项。from tkinter import * from tkinter.ttk import * root Tk() root.title(ch13_7) root.geometry(300x120) var StringVar() cb Combobox(root, textvariablevar) cb[values] (Python, Java, C, C, C#) cb.current(0) # 设置默认选项 cb.pack() root.mainloop()执行结果在前面建立Combobox过程中有textvariablevar此var在第8行创建有了它就可以用var.set(xx)方式建立默认选项当然对这个实例而言使用current()方法较为便利。下面程序实例ch13_8重新设计ch13_7使用var.set()建立默认选项。var.set(Python)执行结果与ch13_7相同。13-2-3 获得目前选项get()在前面建立Combobox过程中有textvariablevar可以使用var.get()获得目前选项的内容。下面程序实例ch13_9扩充设计ch13_7增加Print按钮当单击此按钮时可以在Python Shell窗口中打印此选项。from tkinter import * from tkinter.ttk import * def printSelection(): print(var.get()) root Tk() root.title(ch13_9) root.geometry(300x120) var StringVar() cb Combobox(root, textvariablevar) cb[values] (Python, Java, C, C, C#) cb.current(0) # 设置默认选项 cb.pack(pady10) btn Button(root, textPrint, commandprintSelection) btn.pack(pady10, anchorS, sideBOTTOM) root.mainloop()执行结果13-2-4 绑定Combobox当Combobox中的选项有变动时会产生虚拟事件也可以使用这个特性将此事件绑定处理方法。下面程序实例ch13_10同步Combobox和Label的内容。from tkinter import * from tkinter.ttk import * def comboSelection(event): labelVar.set(var.get()) root Tk() root.title(ch13_10) root.geometry(300x120) var StringVar() cb Combobox(root, textvariablevar) cb[values] (Python, Java, C, C, C#) cb.current(0) cb.bind(ComboboxSelected, comboSelection) cb.pack(pady10) labelVar StringVar() label Label(root, textvariablelabelVar) labelVar.set(var.get()) label.pack(sideLEFT) root.mainloop()执行结果