在 tkinter 中,在 python 3 中,我怎样才能让一个按钮执行一个命令来执行诸如“def helloCallBack(a)”之类的功能,并允许我给出一个? [复制]

Posted

技术标签:

【中文标题】在 tkinter 中,在 python 3 中,我怎样才能让一个按钮执行一个命令来执行诸如“def helloCallBack(a)”之类的功能,并允许我给出一个? [复制]【英文标题】:In tkinter, in python 3, how can I make a button do a command that goes to a fuction such as "def helloCallBack(a)", and allows me to give a? [duplicate] 【发布时间】:2019-10-13 03:43:02 【问题描述】:

如果我运行它,它将运行命令而无需按下按钮。而且我知道我可以在第二行将变量 a 更改为“hi”,但我不能使用我正在处理的另一段代码(我让这个代码变得更简单和更容易解释(不是因为你不会不懂))

我尝试更改第 4 行括号之间的内容,但没有帮助。

from tkinter import *
from tkinter import messagebox

top = Tk()
top.geometry("100x100")
def helloCallBack(a):
    msg = messagebox.showinfo( "Hello Python", a)

B = Button(top, text = "Hello", command = helloCallBack("hi"))
B.place(x = 50,y = 50)
top.mainloop()

我希望,只要按下按钮,而不是之前,消息框就会出现并显示“Python hi”。

【问题讨论】:

【参考方案1】:

使用 lambda 将入口数据传递给命令函数:

from tkinter import *
from tkinter import messagebox

top = Tk()
top.geometry("100x100")
def helloCallBack(a):
    msg = messagebox.showinfo( "Hello Python", a)
B = Button(top, text = "Hello", command = lambda: helloCallBack('hi'))
B.place(x = 50,y = 50)
B.pack()
top.mainloop()

【讨论】:

谢谢,我已经找到了一种不同的(更糟糕的)方法,但它在我的脑海中更有意义,所以我会坚持下去,如果你想知道我是怎么做到的,请评论我回来了,但仍然非常感谢:D 我会很感激的。知道更多解决方案总是很好,tnx :) @wondercoll 很难更改代码,所以我会告诉你,如果我在按钮之前定义 a ,它就会理解 a 是什么,并且当我调用命令时我不需要它,但是它仅在我只想使用该 def 一次时才有效。正如我所说,更糟糕的是,但这是有道理的。 很好,谢谢 :) @wondercoll

以上是关于在 tkinter 中,在 python 3 中,我怎样才能让一个按钮执行一个命令来执行诸如“def helloCallBack(a)”之类的功能,并允许我给出一个? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3 和 tkinter 中使用变量调用函数

如何在 python 3.4 tkinter“索引错误:列表索引超出范围”中修复此错误

如何使用 tkinter/ttk 在 Python 3 中显示图像?

在 Python 3 中使用 tkinter 更改单选按钮的背景颜色

如何在python 3.4.x中的tkinter文本小部件中显示渲染的html内容

python 3.x tkinter,将来自opencv cv2的帧集成到tkinter窗口中