如何让 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
时,您会得到一本字典。键是选项名称,值是一个元组。元组将有两个值或五个值。
两个值
如果字典元素有两个值,它表示另一个选项的别名。取值如下:
- 选项的名称(例如:"bd" 表示 borderwidth)
- 作为别名的 tcl/tk 选项(例如“-borderwidth”)
例如,对于具有 borderwidth
属性的小部件,configure()
的结果将有一个值为 ('bd', '-borderwidth')
.
的键 "bd"
五个值
如果字典元素有五个值,则为正常选项。取值如下:
- 选项的名称(例如"borderwidth")
- 选项数据库1名称(例如"borderWidth")
- 选项数据库class名称(例如"BorderWidth")
- 选项的默认值
- 选项的当前配置值
打印所有选项及其值
您可以遍历此字典以通过检查具有五个元素的所有值来打印出值。例如:
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。
我正在使用 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
时,您会得到一本字典。键是选项名称,值是一个元组。元组将有两个值或五个值。
两个值
如果字典元素有两个值,它表示另一个选项的别名。取值如下:
- 选项的名称(例如:"bd" 表示 borderwidth)
- 作为别名的 tcl/tk 选项(例如“-borderwidth”)
例如,对于具有 borderwidth
属性的小部件,configure()
的结果将有一个值为 ('bd', '-borderwidth')
.
"bd"
五个值
如果字典元素有五个值,则为正常选项。取值如下:
- 选项的名称(例如"borderwidth")
- 选项数据库1名称(例如"borderWidth")
- 选项数据库class名称(例如"BorderWidth")
- 选项的默认值
- 选项的当前配置值
打印所有选项及其值
您可以遍历此字典以通过检查具有五个元素的所有值来打印出值。例如:
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。