每当我使用Tkinter
在python中编程时,代码如下所示:
from Tkinter import *
class GUI():
def __init__(self, master):
self.master = master # master is an instance of Tk
self.master.title("") # set the name of the window
self.frame = Frame(self.master, width=800, height=500, bg="#eeeeee")
# 800, 500 and "#eeeeee" are examples of course
self.frame.pack()
self.canvas = Canvas(self.frame, width=800, height=500, bg="ffffff")
self.canvas.place(x=0, y=0)
#mostly there are some other widgets
# here are obviously other methods
def main():
root = Tk()
app = GUI(root) # root and app.master are synonyms now
app.master.mainloop()
if __name__ == '__main__':
main()
我的问题是,我真的不明白为什么Frame(width=800, height=500)
或place(x=0, y=0)
正在运作:我没有定义参数height
,width
,{{1 }和x
。查看y
- 模块中的代码,函数需要一个名为Tkinter
或*args
的参数。我知道如何使用它们(至少足以开发一些小应用程序),但我不知道如何定义使用此参数的函数。我觉得我对python的这一部分并不是很了解,尽管我可以使用它。
所以我的问题是:
如何定义一个函数,使用以下语法调用的函数:
**kw
我不需要知道如何制作一个接受不同数量参数的函数(结合我的问题),但它也没关系。
答案 0 :(得分:1)
您所指的是关键字参数。
可以说,使用特定关键字参数定义函数的最佳方法之一是提供默认值。如果您不需要任何其他默认值,则默认值为None
是常见的:
def functionName(parameterName1=None, parameterName2=None):
print("parameter one is: %s" % str(parameterName1))
print("parameter two is: %s" % str(parameterName2))
然后您可以像这样调用此函数:
foo = functionName(parameterName1="hello", parameterName2="world")
您也可以执行tkinter函数所做的操作,并接受**kwargs
作为参数。这会将所有命名参数收集到一个字典中,然后您可以迭代:
def functionName(**kwargs):
print("the arguments are:", kwargs)
注意:您不必使用名称kwargs
- 您可以使用任何您想要的名称(**kw
,**kwargs
,**whatever
),但{ {1}}似乎是最常见的。