【问题标题】:activating function only when tkinter button clicked on Python [duplicate]仅当 tkinter 按钮单击 Python 时才激活功能 [重复]
【发布时间】:2017-06-25 06:33:44
【问题描述】:

我创建了一个名为get_data['name']. 的函数 该函数获取一个字符串(例如'name'),输出是一个数字数组。

我用 tkinter 做了几个按钮,看起来像这样:

# A Button
A_Button = Button(GUI, image=A_Im, command=get_data('a_name'))
A_Button.grid(column=0, row=1)

# C Button
C_Button = Button(GUI,image=C_Im,command=get_data('c_name'))
C_Button.grid(column=0, row=2)

# D_Button
D_Button = Button(GUI, image=D_Im, command=get_data('d_name'))
D_Button.grid(column=0, row=3)

但是,当我运行代码时,它会为每个按钮执行 get_data 函数,而我希望它仅在我单击特定按钮时才起作用。

我怎样才能让它只在点击时工作?

谢谢。

【问题讨论】:

  • 我不熟悉 tkinter,但从它的外观来看,您正在将命令 get_data 添加到每个按钮。这是故意的吗?
  • 是的,每个按钮都应该调用该函数,但输入不同。

标签: python python-3.x user-interface button tkinter


【解决方案1】:

问题在于,您为Buttoncommand 参数赋值的方式首先会立即调用 get_data 函数。这是因为您将其编写为常规函数调用。最后,您最终将实际函数调用的返回值分配给Buttoncommand 参数。

相反,您需要确保为command 参数分配了一个实际的函数(或者通常是任何可调用 对象)。这样可以确保它会被延迟评估,并且仅在您实际单击按钮时调用。

一种简单的方法是将其包装在一个小的 lambda 函数中,如下所示:

C_Button = Button(GUI,image=C_Im,command = lambda: get_data('c_name'))

【讨论】:

  • 成功了,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2021-10-27
  • 2019-03-22
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多