2016-11-18 73 views
0

調用每當我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,xy。查看模塊Tkinter中的代碼,函數需要一個名爲*args**kw的參數。我知道如何使用它們(至少足夠開發一些小應用程序),但我不知道如何定義一個使用這個參數的函數。我覺得我對python的這一部分並不十分了解,儘管我可以使用它。

所以我的問題是:
我怎麼可以定義一個函數,所謂的語法如下:

functionName(parameterName1 = value, paramterName2 = value, ...) 

我並不需要知道如何使一個功能是什麼接受變參數的數量(與我的問題相結合),但它也可以。

+0

任何基本的python教程都會告訴你如何做到這一點。這是標準教程中的[定義函數](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)。 – tdelaney

回答

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 ),但kwargs似乎是最常見的。

+0

謝謝,我已經知道如何設置默認值,我只是不知道我可以在函數調用中鍵入參數名稱。 – Aemyl