我最近完成了一个简单的命令行奥赛罗游戏,现在我正在尝试为它创建一个GUI。我的想法是,我会在一个8乘8的网格中按下一个框架,然后用框架坐标调用我的place_tile函数(方法)。我已经能够调用需要带按钮参数的函数,但是在框架方面我遇到了问题。有没有人知道我做错了什么,或者可能是我做的更好的方法?
有效的示例代码:
json.loads()
我想做的是从背景框架中调用类似hello函数的内容,谢谢。
答案 0 :(得分:1)
您可以使用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))
但是你想要的只是调用Frame
方法的bye()
对象,你可以使用tkinter - event.widget
传递的事件变量轻松获得它。示例 -
def bye(event):
frameobj = event.widget
print("Bye")
background = Frame(root, height=100, width=100)
background.bind("<Button-1>", bye)