【问题标题】:commands in TkinterTkinter 中的命令
【发布时间】:2020-12-29 08:17:03
【问题描述】:

我有以下代码,但它没有任何想法?

【问题讨论】:

    标签: python button tkinter command


    【解决方案1】:

    这个参数不会接受两个函数。 解决此问题的最佳方法是创建一个执行所有其他功能的函数。

    def main_menu():
        pass
    
    
    def apending_to_text_file():
        pass
    
    
    def commands():
        main_menu()
        apending_to_text_file()
    
    
    login_button = Button(
        root, text="Click here to enter data",
        command=commands
    )
    

    【讨论】:

    • 我认为这比制作一个难以阅读和难以调试的 lambda 更好。
    【解决方案2】:

    这里有几个问题。 and 是一个逻辑和,所以你不能这样使用它。

    其次,您使用括号调用第二个函数,而不是传递函数本身。这意味着您将函数的返回值作为命令传递。所以如果我们有一个函数

    def my_func():
        return 'hello'
    

    传入command = my_func 将使按钮调用my_func()。如果你尝试传入command = my_func(),你最终会传入字符串hello,这是没有意义的。

    第三,解决方案是将两个函数包装在一个单独的函数中。要内联执行此操作,您可以使用调用这两个函数的 lambda 函数(在这种情况下,您需要括号)。或者你可以单独定义这个函数,然后调用你想要的两个函数。

    以下是示例:

    def on_button_submit():
        main_menu()
        appending_to_text_file()
    

    那么你可以使用这个 on_button_submit 作为你的按钮的命令。

    或者使用 lambda 函数。以下是 lambda 函数如何工作的简单示例:

    def func1():
      print('in func1')
    
    def func2():
      print('in func2')
    
    x = lambda : (func1(), func2())
    x()
    

    因此您可以使用以下命令作为按钮命令:

    lambda : (main_menu(), appending_to_text_file())
    

    【讨论】:

    • 感谢您的帮助,但我对如何做到这一点有点困惑
    • 当然,我会举一些例子
    【解决方案3】:

    您可以使用lambda 函数尝试类似的操作

    login_button = Button(root, text="Click here to enter data", command=lambda:[main_menu(),apending_to_text_file()])
    

    【讨论】:

    • 不幸的是,这不起作用,apending_to_text_file 部分有效,但 main_menu 部分无效
    • 试试main_menu()圆括号@Katie010203
    • @Katie010203 如果你觉得它有帮助,你可以接受它作为答案
    • 函数比复杂的 lambda 更容易维护和调试。
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2023-03-03
    • 2015-04-30
    • 2021-04-14
    • 2023-02-24
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多