Python - 从 Tkinter 回调返回

2024-03-19

如何从作为 Tkinter 回调执行的函数中获取返回的对象?

import Tkinter as Tk
from functools import partial

def square(x):
    return x*x

root = Tk.Tk()
var = Tk.IntVar(root, value=0) #the variable the gets passed to the class call
menu = Tk.OptionMenu(root, var, *[0,1,2,3,4,5]) #a drop-down list to choose a value for the variable
menu.pack()
button = Tk.Button(root, text='click', command = partial(square,var.get())) #a button that calls the class
button.pack()
root.mainloop()

显然这是一个简化的例子。实际上,按钮调用的函数将返回对象,我希望将其附加到将保存在主 Python 命名空间中以进行进一步操作的对象列表中。

无论如何,在这里用户可以使用 GUI 选择函数的参数,然后按下将执行该函数的按钮。然而,该函数的返回值似乎注定会丢失在以太中,因为回调不会接受返回。可以在不使用丑陋的情况下克服这个问题吗?global在定义中square(x)?


从回调“返回”值的概念在事件驱动程序的上下文中没有意义。回调作为事件的结果被调用,因此没有地方可以返回值。

作为一般经验法则,您的回调应始终调用函数,而不是使用functools.partial or lambda。当需要时,这两者都很好,但如果您使用面向对象的编码风格,它们通常是不必要的,并且会导致代码比需要的更难维护。

例如:

def compute():
    value = var.get()
    result = square(value)
    list_of_results.append(result)

button = Tk.Button(root, text='click', command = compute)
...

如果将应用程序创建为类,这会变得容易得多,并且可以避免全局变量:

class App(...):
    ...
    def compute():
        ...
        result = self.square(self.var.get())
        self.results.append(result)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python - 从 Tkinter 回调返回 的相关文章

随机推荐

  • Wagtail 文档:大文件(>2GB)上传失败

    我正在尝试使用 Wagtail 应用程序中内置的 wagtaildocs 应用程序上传文件 我已经使用 Nginx 的 Digital Ocean 教程方法设置了 Ubuntu 16 04 服务器 鳐鱼 Postgres 一些初步澄清 在我
  • 包签名与之前安装的版本不匹配

    这是我的项目 https github com kenpeter my hak news https github com kenpeter my hak news 它是直接复制https github com grigio HAgnost
  • Google Map API V3.0 - 如何检测 MapTypeId 更改

    要添加侦听器来检测缩放更改 请执行以下操作 google maps event addListener map zoom changed function 检测地图类型变化的代码是什么ROADMAP到另一个视图 例如SATELLITE 我可
  • .net/C# 中的网络

    有人可以为我指明学习如何在 C net 3 5 中进行网络连接的正确方向吗 欢迎提供代码示例和解释 基本上我正在寻找如何进行异步 多线程服务器 客户端模型 我对如何使用 WinSock 在 C 中实现这一点的基础知识相当满意 但尽管我所有的
  • 检测 osx 何时睡眠/从睡眠中恢复

    是否可以编写一个 python 程序 我认为我将作为守护进程运行 来检测 osx 何时进入睡眠状态以及何时从睡眠状态恢复 如果听起来我没有研究过这一点 我很抱歉 我已经超出了我的舒适区 不确定我是否需要从 python 委托给用 C 编写的
  • 如何在Python中以相同比例在同一图形上绘制两个3D矩阵图

    我有两个矩阵 我希望在同一个图上的两个子图上有相应的两个 3D 图 并且具有相同的 z 轴 到目前为止 这是我的代码 import numpy as np import matplotlib pyplot as plt from mpl t
  • 奇怪的海湾合作委员会行为

    给出以下 C 代码 struct vertex type float x y z vertex type vertex type float x float y float z x x y y z z typedef struct vert
  • 如何将包安装到 conda 创建的特定 virtualenv 中 [重复]

    这个问题在这里已经有答案了 我想在 conda 创建 virtualenv 后安装 python 包 但我收到以下错误 有谁知道如何将软件包安装到 conda 创建的 virtualenv 中 Users jzhang anaconda l
  • Java中的ConcurrentHashMap?

    有什么用ConcurrentHashMap在Java中 它有什么好处 它是如何工作的 示例代码也很有用 重点是提供一个实现HashMap那是线程安全的 多个线程可以读取和写入它 而不会接收到过期或损坏的数据 ConcurrentHashMa
  • 基于声明的安全性时的 http 客户端标头授权

    我正在从使用基于声明的安全性的 MVC 应用程序调用 REST api 我将如何设置身份验证标头 我没有密码 所以我想我不应该使用 Basic 如果使用 Bearer 如何获取令牌 Client DefaultRequestHeaders
  • 向 Magento 的订阅模块添加自定义字段

    Magento 中的新闻通讯订阅模块默认只有一个字段 电子邮件 在我向表单添加额外字段 例如国家 地区 后 如何让表单数据显示在 Magento 后端并作为电子邮件发送给预设收件人 谢谢 如果您想为 Magento 新闻通讯订阅者添加一些自
  • 使用 matplotlib 绘制类似 Python 极地时钟的图

    我正在尝试使用 Python 中的 matplotlib 以顺时针方式绘制数据 其风格为这个答案 https stackoverflow com questions 25898523 how to plot points on a cloc
  • 当 AutoGenerateColumns 为 nullable bool 时,WPF DataGrid 强制绑定 DataGridCheckBoxColumn

    我们有很多DataGrid具有动态数据绑定 所以我们总是使用AutoGenerateColumns True For bool列生成一个DataGridCheckBoxColumn但对于可为 null 的 bool bool 在 C 中 生
  • C++ 中的 Utf-8:快速而肮脏的技巧

    我知道有关于 utf 8 的各种问题 主要是关于操作 utf 8 字符串 之类对象的库 然而 我正在开发一个 国际化 项目 一个网站 我在其中编写了 c 后端 不要问 即使我们处理 utf 8 我们实际上也不需要这样的库 大多数时候 简单的
  • 如何从 Google Places API 获取菜单和产品列表的数据?

    在 Google 地图上 企业可以将菜单中的产品详细信息或食品 菜肴 添加到其商店或餐厅 地点 我们如何获得这些数据 在里面Google Place Api 地点详细信息 https developers google com places
  • 无法创建新的 Spree 应用程序:“未定义方法‘raise_in_transactional_callbacks=’”

    几个月前我就遇到过这个问题将其发布到 Spree 的 GitHub 页面上 https github com spree spree issues 5448 然后自己找出解决方案并将其发布在同一问题上 两个月后 我仍然收到来自具有相同错误消
  • 防止伪元素触发悬停?

    如果我有标记 div class a b div 其中 a 类有一个与之关联的悬停类 并且 b 类有一个与之关联的伪元素 就像这样 div width 100px height 100px a background red display
  • 在 Swift 中使用字符分隔符查找并突出显示文本

    我之前开发了一个 Android 应用程序 作为用户的参考指南 它使用 sqlite 数据库来存储信息 数据库存储不带格式的 UTF 8 文本 即粗体或下划线 为了突出显示文本的哪些部分需要格式化 我使用分隔符标记 特别是 将它们括起来 因
  • Zipline 导入错误。没有名为 zipline.transforms 的模块

    我无法导入 zipline transforms 模块 gt gt gt from zipline transforms import batch transform Traceback most recent call last File
  • Python - 从 Tkinter 回调返回

    如何从作为 Tkinter 回调执行的函数中获取返回的对象 import Tkinter as Tk from functools import partial def square x return x x root Tk Tk var