[英]How do you pass parameters to a function passed as a keyword argument?
我有一個tkinter按鈕,誰的命令調用一個帶有參數的函數,在這種情況下,該函數將tkinter窗口作為參數。
from tkinter import *
def main():
root = Tk()
app = Application(master=root)
app.update()
def do_something(tk_win):
# Do something to the window
class Application(Frame):
master = None
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.frame = Frame(self.master)
self.btn = Button(self, text="Redo Search", command=do_something, self)
self.frame.pack()
self.search_again.pack()
我為btn
賦值的行被我的IDE標記為“在關鍵字參數后面有位置參數”。 我明白為什么這么說,但是我不知道如何將self作為參數傳遞給函數。 我該怎么做呢? 謝謝!
要在調用第二個self
作為參數傳遞給do_something
時,您可以創建一個零參數函數,該函數在調用時依次調用do_something
和所需的單個參數。
一種方法是使用lambda :
self.btn = Button(self, text="Redo Search", command=lambda: do_something(self))
...另外一種方法是使用functools.partial
幫助器 (在functools
模塊中)來生成“部分評估”函數,其目的是:
self.btn = Button(self, text="Redo Search", command=functools.partial(do_something, self))
簡單,從函數中刪除自我
self.btn = Button(self, text="Redo Search", command=lambda: do_something(self))
以下更改對您的設計有用嗎? 使函數成為類的一部分,並使用“ self-dot”語法將其“正常”調用。
class Application(Frame):
master = None
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
### Pull the function into the class
def do_something(self):
# Do something to the window
...
def create_widgets(self):
self.frame = Frame(self.master)
### Call the function with straightforward syntax
self.btn = Button(self, text="Redo Search", command=self.do_something)
self.frame.pack()
self.search_again.pack()
通過使用do_something(self)函數。
返回一個新的部分對象,該對象在被調用時的行為類似於使用位置參數args和關鍵字arguments關鍵字調用的func。 如果將更多參數提供給調用,則將它們附加到args。 如果提供了其他關鍵字參數,它們將擴展並覆蓋關鍵字。 大致相當於:
def部分(func,args,* keywords):def newfunc(* fargs,** fkeywords):newkeywords = keyword.copy()newkeywords.update(fkeywords)return func(* args,fargs,* newkeywords)newfunc.func = func newfunc.args = args newfunc.keywords =關鍵字返回newfunc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.