Python 将get方法作为参数传递tkinter变量

Python 将get方法作为参数传递tkinter变量,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我已经阅读了这个问题的答案: 虽然它似乎是相关的,但似乎并没有回答我的问题,因为上面问题中的问题是调用用户定义的函数。我将调用的方法(tkinter StringVar的.get()方法)传递给内置的“print”函数。 我的代码如下: import tkinter as tk from functools import partial def print_called(variable): print(variable.get()) try: root = tk.Tk()

我已经阅读了这个问题的答案:

虽然它似乎是相关的,但似乎并没有回答我的问题,因为上面问题中的问题是调用用户定义的函数。我将调用的方法(tkinter StringVar的.get()方法)传递给内置的“print”函数。 我的代码如下:

import tkinter as tk
from functools import partial

def print_called(variable):
    print(variable.get())

try:
    root = tk.Tk()
    var = tk.StringVar()
    options = tk.OptionMenu(root, var, 'string 1', 'string 2', 'string 3', 'string 4')
    button_1 = tk.Button(root, text='button_1', command=partial(print_called, var))
    button_2 = tk.Button(root, text='Button_2', command=partial(print, var.get()))

    options.pack()
    button_1.pack()
    button_2.pack()
finally:
    root.mainloop()
我运行上述代码并从菜单中选择“字符串1”。当我点击按钮_1时,它会按预期打印“字符串1”。当我点击按钮2时,它会打印一个空行。我的问题是:

  • 为什么会发生这种情况?为什么两者之间有区别
  • 如何将var.get()的结果(即字符串“string 1”)作为参数传递给函数
  • command=partial(print,var.get())
    在创建
    按钮2
    时直接计算。此时未选择任何内容,
    var.get()
    返回一个空字符串


    您可以使用lambda函数:
    command=lambda:print(var.get())
    ,但这与您在
    button_1
    中所做的几乎相同,只是使用lambda函数而不是普通函数。

    我认为
    lambda
    会做得更好,
    command=lambda:print(var.get())
    。它与代码流有关,
    var
    的值是
    '
    在声明
    button_2
    时,您调用了
    var.get()
    作为按钮创建的一部分-该值为空,因为没有任何东西可以更改
    StringVar
    的默认值。存储在
    partial
    对象中的值不会因为最初生成它的表达式不再具有相同的值而神奇地改变。谢谢。你能解释一下partial和lambda的区别吗?i、 e.如果我使用lambda,为什么在创建按钮2时没有计算var.get(),但如果我使用partial,则会计算它?我对stackoverflow相当陌生。我是否应该将此作为一个单独的问题发布?对于分部函数,
    var.get()
    是一个参数,而在另一种情况下,它位于新创建的(lambda-)函数体中。