Tkinter 组件详解之OptionMenu
OptionMenu(选择菜单)事实上是下拉菜单的改版,它的发明弥补了 Listbox 组件无法实现下拉列表框的遗憾。
用法
创建一个选择菜单非常简单,只需要它一个 Tkinter 变量(用于记录用户选择了什么)以及若干选项即可:
import tkinter as tk root = tk.Tk() variable = tk.StringVar() variable.set("one") w = tk.OptionMenu(root, variable, "one", "two", "three") w.pack() root.mainloop()
要获得用户选择的内容,使用 Tkinter 变量的 get() 方法即可:
import tkinter as tk root = tk.Tk() variable = tk.StringVar() variable.set("one") w = tk.OptionMenu(root, variable, "one", "two", "three") w.pack() def callback(): print(variable.get()) tk.Button(root, text="点我", command=callback).pack() root.mainloop()
下边例子演示如何将很多选项添加到选择菜单中:
import tkinter as tk OPTIONS = [ "Wuhan", "Beijing", "Shanghai", "Tianjin", "Aomen", "Xianggang", "Hankou" ] root = tk.Tk() variable = tk.StringVar() variable.set(OPTIONS[0]) w = tk.OptionMenu(root, variable, *OPTIONS) #*号有一个解包的功能,如果没有 * 号,就把整个列表当做一个选项了 w.pack() def callback(): print(variable.get()) tk.Button(root, text="点我", command=callback).pack() root.mainloop()
注意:星号(*)作为形参的时候是起到“打包”的作用,相反,作为实参的时候是起到“解包”的作用。
一、星号(*)作为形参,表示调用可变参数函数:
通过在形参前加一个星号(*)或两个星号(**)来指定函数可以接收任意数量的实参。
def fun1(*args): print(type(args)) print(args) fun1(1, 2, 3, 4, 5) # 输出: # <class 'tuple'> # (1, 2, 3, 4, 5) def fun2(**args): print(type(args)) print(args) fun2(a=1, b=2, c=3, d=4, e=5) # 输出: # <class 'dict'> # {'e': 5, 'a': 1, 'c': 3, 'd': 4, 'b': 2}
从两个示例的输出可以看出:当参数形如 *args 时,传递给函数的任意个实参会按位置打包成一个元组(tuple);
当参数形如 **args 时,传递给函数的任意个 key = value 实参会被包装进一个字典(dict)。
二、星号(*)作为实参时,表示通过解包参数调用函数
有打包就有解包,通过在实参前加一个星号(*)或两个星号(**)来对列表(list)、元组(tuple)或字典(dict)进行解包:
>>> a = [1, 2, 3, 4, 5] >>> b = (1, 2, 3, 4, 5) >>> fun1(*a) (1, 2, 3, 4, 5) >>> fun1(*b) (1, 2, 3, 4, 5) >>> c = {'one':1, 'two':2, 'three':3} >>> fun2(**c) {'two': 2, 'one': 1, 'three': 3} >>>
原文链接:https://blog.csdn.net/qq_41556318/article/details/85274122