zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python--网络编程
    Linux-安装Windows字体
    计算机网络基础
    Cobalt Strike之CHM、LNK、HTA钓鱼
    Python之——python-nmap的安装与常用方法说明
    Python之单例模式的多种实现
    Cobalt Strike之信息收集、木马钓鱼
    Ubuntu 16.04安装Java 8
    代码审计-MetInfo 6.0.0 sql注入漏洞
    代码审计-凡诺CMS 2.1文件包含漏洞
  • 原文地址:https://www.cnblogs.com/yunlong-study/p/14511779.html
Copyright © 2011-2022 走看看