如何让 Python 吐出 argument/kwarg 的所有定义值?

How do I get Python to spit out all defined values for an argument/kwarg?

我正在使用 TkInter 构建一个简单的 GUI,我希望 Python 告诉我所有可用的选项,我可以将 Cursors 配置为,例如:button.config(Cursor="cross").

我知道我可以在某个地方的教程或文档中找到一个列表,但我的想法是我最好知道如何让 Python 告诉我自己......给一个人一条鱼等等

我做了一些研究并尝试使用 dir()、getattr() 和 vars() 以及 keys()。我猜至少其中一个会得到我想要的东西,但我对他们吐出的大量东西感到困惑。

例如:

import tkinter as tk

b = tk.Button()

print('Using dir: ', dir(b))

print('Using getattr: ', getattr(b, 'config'))

print('Using vars: ', vars(b))

print('Using keys: ', b.keys())

理想情况下,我希望它吐出一个可迭代的对象,我可以将其用于 test/trial 每个可用的定义。我不知道这是否可能,但由于 python/TkInter 知道我传递 b.config(cursor='cross') 之类的内容时的意思,因此它必须在某处列出,对吗?

正如我所说,我尝试的函数吐出了一堆我可以赋予值的方法和属性,但没有给出可用的值。

*编辑:对于这个特定示例,这是我想提供可用选项的代码。

import math
import tkinter as tk

w = tk.Tk()


def listify(event):

    c = 0

    all_options = entry.get()
    entry.destroy()
    list_options = all_options.split(" ")
    print(len(list_options))

    for value in list_options:
        lbl = tk.Label(text=value, cursor=value, bd=2, relief=tk.RAISED)
        rounded = int(math.floor(c / 20))

        r = c - 20 * rounded

        lbl.grid(column=rounded, row=r, pady=5,
                 padx=5, rowspan=1, sticky=tk.NSEW)

        c += 1


entry = tk.Entry()
entry.grid()
entry.bind('<Return>', listify)

w.mainloop()

每个小部件都有一个 configure 方法,它将 return 小部件的所有配置选项。

当您调用 configure 时,您会得到一本字典。键是选项名称,值是一个元组。元组将有两个值或五个值。

两个值

如果字典元素有两个值,它表示另一个选项的别名。取值如下:

  1. 选项的名称(例如:"bd" 表示 borderwidth)
  2. 作为别名的 tcl/tk 选项(例如“-borderwidth”)

例如,对于具有 borderwidth 属性的小部件,configure() 的结果将有一个值为 ('bd', '-borderwidth').

的键 "bd"

五个值

如果字典元素有五个值,则为正常选项。取值如下:

  1. 选项的名称(例如"borderwidth")
  2. 选项数据库1名称(例如"borderWidth")
  3. 选项数据库class名称(例如"BorderWidth")
  4. 选项的默认值
  5. 选项的当前配置值

打印所有选项及其值

您可以遍历此字典以通过检查具有五个元素的所有值来打印出值。例如:

config = button.configure()
for option in sorted(config.keys()):
    if len(config[option]) == 5:
        print("{} = {}".format(option, config[option][5]))

1选项数据库主要用于基于 X11 的系统(即不是 windows,不是 OSX)。有关如何使用选项数据库的示例,请参阅 effbot 上的 Changing the Default Font via the Option Database

有关选项数据库的全面概述,请参阅 Options and Tk - a Beginners Guide。它是从 tcl 程序员的角度编写的,但其中的概念适用于 tkinter。