一拟赊、介紹
OptionMenu
(選擇菜單)事實(shí)上是下拉菜單的改版舅逸,它的發(fā)明彌補(bǔ)了 Listbox 組件無法實(shí)現(xiàn)下拉列表框的遺憾刽严。
二蹬碧、使用
創(chuàng)建一個選擇菜單非常簡單舱禽,只需要它一個 Tkinter
變量(用于記錄用戶選擇了什么)以及若干選項(xiàng)即可:
from tkinter import *
root = Tk()
v = StringVar()
v.set('水果')
om = OptionMenu(root,v,'香蕉','蘋果','桃子')
om.pack()
mainloop()
要獲得用戶選擇的內(nèi)容,使用 Tkinter
變量的 get()
方法即可:
from tkinter import *
root = Tk()
v = StringVar()
v.set('水果')
om = OptionMenu(root,v,'香蕉','蘋果','桃子')
om.pack()
def show():
print(v.get())
Button(text = '你猜我選了什么恩沽?',command = show).pack()
mainloop()
下邊例子演示如何將很多選項(xiàng)添加到選擇菜單中:
from tkinter import *
OPTIONS = [
"California",
"458",
"FF",
"ENZO",
"LaFerrari"
]
root = Tk()
variable = StringVar()
variable.set(OPTIONS[0])
w = OptionMenu(root, variable, *OPTIONS)
w.pack()
def callback():
print(variable.get())
Button(root, text="點(diǎn)我", command=callback).pack()
mainloop()
注意:星號(*)作為形參的時(shí)候是起到“打包”的作用誊稚,相反,作為實(shí)參的時(shí)候是起到“解包”的作用罗心。
三里伯、星號*
1、星號(*)作為形參渤闷,表示調(diào)用可變參數(shù)函數(shù):
通過在形參前加一個星號*
或兩個星號**
來指定函數(shù)可以接收任意數(shù)量的實(shí)參疾瓮。
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}
從兩個示例的輸出可以看出:
當(dāng)參數(shù)形如 *args 時(shí),傳遞給函數(shù)的任意個實(shí)參會按位置打包成一個元組(tuple)
當(dāng)參數(shù)形如 **args 時(shí)飒箭,傳遞給函數(shù)的任意個 key = value 實(shí)參會被包裝進(jìn)一個字典(dict)
2狼电、星號(*)作為實(shí)參時(shí),表示通過解包參數(shù)調(diào)用函數(shù)
有打包就有解包弦蹂,通過在實(shí)參前加一個星號*
或兩個星號**
來對列表list
肩碟、元組tuple
或字典dict
進(jìn)行解包:
>>> 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}
>>>
總結(jié):一個星號*
用來打包和解包序列,兩個星號**
用來打包和解包字典凸椿。