【问题标题】:How to use three different tkinter buttons with one command如何通过一个命令使用三个不同的 tkinter 按钮
【发布时间】:2020-09-22 16:05:16
【问题描述】:

请帮忙。使用 tkinter 时,当 def 在按钮下方时,我发现很难在按钮中调用定义的函数。我使用 python 3.6.9。示例

import tkinter
window = tkinter.Tk
button = tkinter.Button(window, text="hello",command=newpage()).grid(column=0, row=0)
def newpage():
    new = tkinter.toplevel()

该按钮不起作用,除非我使用 lambda,而且如果我在按钮下定义新内容,则 lambda 也不起作用。新定义阻止 lambda 看到另一个 def。 注意:我使用这样的 lambda lambda:newpage() 注意:我使用 python 3.6.9 另外请我如何制作许多 tkinter 按钮以使用相同的命令(如在 def 中)

【问题讨论】:

  • 我很想将其作为 stackoverflow.com/q/5767228/7432 的副本关闭。您能否扩展您的问题以显示您的问题有何不同?
  • @Bryan 请不要关闭问题。 Stackflow 一直是我应对大多数挑战的手段,我一遍又一遍地搜索,但无法从之前的任何问题中找到解决方案。请帮我解决这个问题。我想有两个按钮使用相同的 def 命令,但它不适用于我的 tkinter。 Lambda 也不工作。无论如何,请帮助我。
  • 请证明您已经尝试过其他问题的建议。正如其他问题所示,command 需要以newpage 的形式给出,而不是newpage()
  • 好的。万分感激。现在也在检查链接。非常感谢。
  • 那么,您是说您要求我不要在您点击该链接之前关闭?为什么不先查看链接?

标签: button tkinter lambda command python-3.6


【解决方案1】:

newpage 函数确实应该在使用之前定义,如果没有其他原因,这只是一种良好的编程习惯。

变量window 被设置为tkinter.Tk,而不是tkinter.Tk() 返回的对象。

按钮立即调用函数,因为命令期望函数运行,并且认为您希望它运行 newpage 返回的内容,而不是删除 () command=newpage

Toplevel 大写,tkinter.Toplevel()

任何按钮都可以使用功能,只需指定使用该功能的命令即可:

import tkinter

def newpage():
    new = tkinter.Toplevel()

window = tkinter.Tk()
button1 = tkinter.Button(window,
                         text="hello1",
                         command=newpage).grid(column=0, row=0)
button2 = tkinter.Button(window,
                         text="hello2",
                         command=newpage).grid(column=0, row=1)
button3 = tkinter.Button(window,
                         text="hello3",
                         command=newpage).grid(column=0, row=2)

【讨论】:

  • 对不起,我误解了你的说法。我在想你说你应该在使用它之前创建顶层。我会删除我的评论。您是正确的,必须在使用之前定义函数。
猜你喜欢
  • 2017-06-19
  • 1970-01-01
  • 2021-07-08
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2015-08-21
相关资源
最近更新 更多