Tkinter,调用带参数的函数
Tkinter, calling a function with arguments
我最近完成了一个简单的命令行黑白棋游戏,现在正尝试为其创建一个 GUI。我的想法是,我将按 8 x 8 网格中的一个框架,这将使用框架坐标调用我的 place_tile 函数(方法)。我也能够调用需要带按钮参数的函数,但在涉及框架时我遇到了问题。有没有人知道我做错了什么或者我做错了更好的方法?
有效的示例代码:
from tkinter import *
root = Tk()
def hello(word):
print(word)
def bye(event):
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)
button = Button(root, text="Bye", command=lambda:hello("Hi"))
button.pack()
background.pack()
root.mainloop()
我想做的是从类似背景的框架中调用 hello 函数之类的东西,谢谢。
您可以使用 lambda 函数的默认参数,示例 -
def dummy(frameobj):
pass
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)
button = Button(root, text="Bye", command=lambda frameobj=background:hello(frameobj))
调用 lambda 时,将不带任何参数调用它,因此将使用指定的默认值。
如果你想将参数传递给 bind()
中使用的函数,那么你还需要包含由 tkinter 自动传递的 event
参数。示例 -
def bye(event, frameobj):
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", lambda event, frameobh=background: bye(event,frameobj))
但是你想要的只是调用 bye()
方法的 Frame
对象,你可以使用 tkinter - event.widget
传递的事件变量轻松获得它。示例 -
def bye(event):
frameobj = event.widget
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)
我最近完成了一个简单的命令行黑白棋游戏,现在正尝试为其创建一个 GUI。我的想法是,我将按 8 x 8 网格中的一个框架,这将使用框架坐标调用我的 place_tile 函数(方法)。我也能够调用需要带按钮参数的函数,但在涉及框架时我遇到了问题。有没有人知道我做错了什么或者我做错了更好的方法?
有效的示例代码:
from tkinter import *
root = Tk()
def hello(word):
print(word)
def bye(event):
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)
button = Button(root, text="Bye", command=lambda:hello("Hi"))
button.pack()
background.pack()
root.mainloop()
我想做的是从类似背景的框架中调用 hello 函数之类的东西,谢谢。
您可以使用 lambda 函数的默认参数,示例 -
def dummy(frameobj):
pass
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)
button = Button(root, text="Bye", command=lambda frameobj=background:hello(frameobj))
调用 lambda 时,将不带任何参数调用它,因此将使用指定的默认值。
如果你想将参数传递给 bind()
中使用的函数,那么你还需要包含由 tkinter 自动传递的 event
参数。示例 -
def bye(event, frameobj):
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", lambda event, frameobh=background: bye(event,frameobj))
但是你想要的只是调用 bye()
方法的 Frame
对象,你可以使用 tkinter - event.widget
传递的事件变量轻松获得它。示例 -
def bye(event):
frameobj = event.widget
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)