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