【问题标题】:Tkinter buttons which require their command to return a value需要命令返回值的 Tkinter 按钮
【发布时间】:2018-06-27 23:01:55
【问题描述】:

我有一个关于tkinter 输入框的奇怪问题:

我知道我会写

add_charge = tk.Button(self, text='Add Data', command=function)

如果函数依赖于参数,我可以把它写成

add_charge = tk.Button(self, text='Add Data', command=lambda: function(parameters)

但我的问题是,我有一个定义为 this 的函数

def add_charge(x,y,i, data):
    """ x,y are locations if the charge, i is the value of charge, data is existing charges"""
    temp = data.append(Charge(x,y,i)) #Charge is a predefined class which creates the charge object
    return temp

我需要做的是将 temp 保存到变量并替换预先存在的数据,但我不知道如何保存按下按钮后函数返回的值。任何帮助表示赞赏!

【问题讨论】:

  • 你不能。您将不得不修改函数以更改全局变量而不是返回数据。如果你移动到一个类结构(就像你在所有 GUI 中应该的那样),那么你可以使用实例变量而不是全局变量。
  • 另外,lambda 会导致很多错误,因为初学者不了解它是如何工作的。我强烈建议您改用functools.partial 或普通函数/方法。
  • 在您的示例中,您已经在修改全局。您的示例中的 return 语句没有用。

标签: python python-2.7 tkinter


【解决方案1】:

感谢评论者,我已经建立了一个解决方法,而不是

def add_charge(x,y,i,data):
    temp = data.append(Charge(x,y,i))
    return temp

我会写

global charge_data
charge_data = []

然后,我可以写

def add_charge(x,y,i):
   charge_data.append(Charge(x,y,i))

这让我可以有效地消除存储函数结果的需要。

【讨论】:

  • 你不需要global charge_data,已经不需要使用global关键字显式启动全局变量了。
  • @abccd 我猜这是错误的答案格式,但是我的程序设置方式,我必须显式创建变量,因为它是在一个类中定义的。
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
相关资源
最近更新 更多