python

时间:2016-11-18 16:52:07

标签: python python-2.7 function syntax tkinter

每当我使用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)正在运作:我没有定义参数heightwidth,{{1 }和x。查看y - 模块中的代码,函数需要一个名为Tkinter*args的参数。我知道如何使用它们(至少足以开发一些小应用程序),但我不知道如何定义使用此参数的函数。我觉得我对python的这一部分并不是很了解,尽管我可以使用它。

所以我的问题是:
如何定义一个函数,使用以下语法调用的函数:

**kw

我不需要知道如何制作一个接受不同数量参数的函数(结合我的问题),但它也没关系。

1 个答案:

答案 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}}似乎是最常见的。