【问题标题】:multiple commands on button press按下按钮时的多个命令
【发布时间】:2017-08-18 15:19:33
【问题描述】:

我将如何更改此代码,以便我也可以让它启动一个名为 Drop_down_menu() 的函数

done_btn = Button(root, text = "Done", command = lambda: root.destroy())       
done_btn.pack()

我看过以前的文章说使用函数并在那里进行操作,但后来它说 root 没有定义。

【问题讨论】:

  • 你说的是哪些“以前的文章”?这是使用模块 TK 的代码吗?更具体
  • 显示你的代码,以及产生的错误信息。

标签: python python-3.x button tkinter


【解决方案1】:

您需要创建一个函数并将root 作为变量传递给它:

def myfunction(root):
    root.destroy()
    Drop_down_menu()

done_btn = Button(root, text = "Done", command = lambda: myfunction(root))       
done_btn.pack()

有关如何在 Tkinter here 中使用 callbacks 的更多详细信息,这是一个很好的教程。这是该教程中有关如何使用带参数的回调的示例:

def callback(number):
    print "button", number

Button(text="one",   command=lambda: callback(1)).pack()
Button(text="two",   command=lambda: callback(2)).pack()
Button(text="three", command=lambda: callback(3)).pack()  

希望这会有所帮助。

【讨论】:

  • 出现此错误:TypeError: () missing 1 required positional argument: 'root'
  • @user8469209 试试Button(root, text = "Done", command = lambda: myfunction(root)) 这样command 是一个没有参数的函数。
  • @AMagoon 会立即调用myfunction(root),而不是在按下按钮时
【解决方案2】:

试试这个

done_btn = Button(root, text = "Done", command = lambda: [root.destroy(),
                                                          Drop_down_menu()])       
done_btn.pack()

希望这能回答你的问题

【讨论】:

    【解决方案3】:

    您也可以以面向对象的方式执行此操作,这将通过让您避开lambda 的使用来清理您的代码:

    from tkinter import *
    
    class App:
        def __init__(self, root):
            self.root = root
            self.btn = Button(self.root, text="Done", command=self.command)
            self.btn.pack()
        def command(self):
            self.root.destroy()
            print("Output")
    
    root = Tk()
    app = App(root)
    root.mainloop()
    

    【讨论】:

      【解决方案4】:

      要调用多重函数或命令,您需要像这样使用 lambda:

      test_button = Button(text="your_text_button", command=lambda:[function1(),function2()])
      text_button.pack()
      

      【讨论】:

        猜你喜欢
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-08
        • 2012-07-02
        • 1970-01-01
        • 2017-06-19
        • 2017-12-23
        • 2013-01-19
        相关资源
        最近更新 更多