我有一个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()
我为IDE分配btn
的值的行被我的IDE标记为“位置自变量跟随关键字自变量”。我明白为什么这么说,但是我不知道如何将self作为参数传递给函数。我该怎么做呢?谢谢!
答案 0 :(得分:3)
要在调用第二个self
时将其作为参数传递给do_something
,您可以创建一个零参数函数,该函数在调用时依次使用所需的单个参数调用do_something
。
一种方法是使用lambda:
self.btn = Button(self, text="Redo Search", command=lambda: do_something(self))
...而另一种方法是使用functools.partial
helper(在functools
模块中)来生成“部分评估”功能,以达到以下目的:
self.btn = Button(self, text="Redo Search", command=functools.partial(do_something, self))
答案 1 :(得分:0)
简单,从函数中删除自身
self.btn = Button(self, text="Redo Search", command=lambda: do_something(self))
答案 2 :(得分:0)
以下更改对您的设计有用吗?使该函数成为该类的一部分,并使用“ self-dot”语法对其进行“正常”调用。
formSubmit(event) {
var obj = {
title: this.title,
status: this.status
};
axios.post('/add-item', this.$data)
.then((response) => {
this.$eventBus.$emit('newitem', obj)
})
event.target.reset();
}
答案 3 :(得分:0)
通过使用do_something(self)函数。
返回一个新的部分对象,该对象在被调用时的行为类似于使用位置参数args和关键字arguments关键字调用的func。如果将更多参数提供给调用,则将它们附加到args。如果提供了其他关键字参数,它们将扩展并覆盖关键字。大致相当于:
def局部(函数,参数,*关键字): def newfunc(* fargs,** fkeywords): newkeywords = keyword.copy() newkeywords.update(fkeywords) return func(* args,fargs,* newkeywords) newfunc.func =函数 newfunc.args = args newfunc.keywords =关键字 返回newfunc