与 Tkinter 跟踪相关的回调函数有哪些限制?

2023-11-30

我试图弄清楚如何实现一个回调函数,它可以做一些比打印输出更有意义的事情。我相当缺乏经验,所以我不确定回调函数应该或可以如何在Python(或任何其他语言)中实现。

考虑以下 Python 代码:

from Tkinter import *

def callbackfunc(*args):
  print "Hello World!"

class App:

  def __init__(self, master):
    frame = Frame(master)
    frame.pack()

    optionvalue = IntVar(master)
    optionvalue.set(2)
    optionvalue.trace("w", callbackfunc)
    self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
    self.optionmenu.pack()

我正在尝试实现一个 OptionMenu (Tkinter 小部件),以便当其选定的值更改时,我的回调函数会执行一些有意义的操作 - 更具体地说,它将更改在程序中其他位置定义的全局变量值。正如上面实现的那样,它只是打印输出(尽管成功)。

我不知道如何将参数传递给我的回调函数。我不希望这个特定的回调函数返回任何内容;但是,我很好奇如何让回调函数返回某些内容,以及如何实现程序的其余部分,以便它可以利用这些返回的结果,无论这些结果是什么。我是否试图以一种本不该实现的方式来实现Python回调函数?如果没有,我该如何使其发挥作用?


有点不清楚“将参数传递给我的回调函数”是什么意思。你已经在这么做了!例如:

from Tkinter import *

def callbackfunc(*args, **kwargs):
    print args, kwargs
    print "Hello World!"

class App(object):
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        optionvalue = IntVar(master)
        optionvalue.set(2)
        optionvalue.trace("w", callbackfunc)
        self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
        self.optionmenu.pack()

root = Tk()
app = App(root)
root.mainloop()

运行时...

$ python foo.py 
('PY_VAR0', '', 'w') {}
Hello World!

所以你看,当 Tkinter 调用你的回调时,它会向它传递参数。如果您想做一些除了打印它们之外的事情,您可以通过传递方法而不是函数将它们存储在某种状态中。

from Tkinter import *

class App(object):
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        optionvalue = IntVar(master)
        optionvalue.set(2)
        optionvalue.trace("w", self.callbackfunc)
        self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
        self.optionmenu.pack()
        self.state = []

    def callbackfunc(self, *args):
        self.state.append(args)
        print self.state


root = Tk()
app = App(root)
root.mainloop()

运行时...

$ python foo.py 
[('PY_VAR0', '', 'w')]
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]

另外,也许您想访问的值optionvalue。然后您可以保存对它的引用:

from Tkinter import *

class App(object):
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        self.optionvalue = IntVar(master)
        self.optionvalue.set(2)
        self.optionvalue.trace("w", self.callbackfunc)
        self.optionmenu = OptionMenu(master, self.optionvalue, 1, 2, 3, 4)
        self.optionmenu.pack()
        self.state = []

    def callbackfunc(self, *args):
        self.state.append(args)
        print self.state
        print self.optionvalue.get()


root = Tk()
app = App(root)
root.mainloop()

运行时...

$ python foo.py 
[('PY_VAR0', '', 'w')]
1
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
2
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
3

你也可以使用root.getvar(name) with name = 'PY_VAR0'(传递给回调的第一个参数),如菜鸟古怪建议。

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

与 Tkinter 跟踪相关的回调函数有哪些限制? 的相关文章

  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 使用 arabic-reshaper 和 python-bidi (在多行情况下)时如何修复反向行?

    当我使用 arabic reshaper 和 python bidi 时 我遇到了一个糟糕的结果 这些行从最后一行开始呈现 我做了一个函数来解决这个问题 因为没有办法用另一种方式解决它 bidi正在反转字符以将第一个放在最后 依此类推 这是
  • Windows 中的符号可见性

    我在 Linux 中进行了大量编程 并使用可见性属性来定义符号在共享对象中是可见还是隐藏 只是为了让事情变得更清楚 如果符号可见 则可以从外部访问它 与共享对象链接的人 如果它是隐藏的 则应该仅在内部使用 在 Windows 上 它的工作方
  • 如何在捕获组内进行替换

    我正在修改现有的 HTML 文档 我正在做一些事情 比如添加目录等 我有一个带有此 ID 的标题 id transcending intellectual limitations 真正的 我希望能够找到整个 ID 然后用连字符替换空格 如果
  • Git GPG 签名错误签名

    我正在尝试在我的 Mac 上启用 gpg 提交签名 我已经成功签署了一项提交 然后尝试再次执行 但从那以后我无法让它再次正常工作 每次它都会说 签名错误 即使密钥 ID 相同 我通常可以毫无问题地签署常规文本文件等 git 是唯一一个做出如
  • PreferenceActivity 中正确的 RadioGroup

    是否可以在 PreferenceActivity 中定义 RadioGroup 我只能在提供多项选择时找到ListView 我错过了什么吗 欢迎您延长any Preference班级 我通过扩展做了你正在寻找的事情PreferenceCat
  • 如何在 VBA 中以编程方式在某些工作表单元格数据旁边添加按钮?

    我有一个函数可以生成 100 行 和 2 列 的数据 对于每一行 在第三列中 我需要添加一个按钮 单击该按钮时 会弹出一个自定义模式对话框 为用户提供 4 个选项 按钮可供选择 知道如何做到这一点吗 我认为这足以让你走上一条美好的道路 Su
  • 将属性添加到数据存储后,如何向 EntityType 添加属性?

    我有一个实体框架代码优先模型 其中有一列未映射 我仍然希望在服务器和客户端之间保留该列 该模型看起来与此类似 但具有更多属性 public class OwnerInformation Key DatabaseGeneratedAttrib
  • python 请求中的 OpenSSL 错误

    在带有 OpenSSL 版本 1 1 1i 和 pyopenssl 版本 1 1 1i 的 arch linux 上运行 python 版本 3 9 1 当尝试将 https 代理与 requests 模块一起使用时 出现以下错误 Trac
  • Excel 中的混合数据类型,IMEX 不起作用

    我正在尝试将 xls 导出到数据表中 下面是我的连接字符串 string path xls source path OleDbConnection MyConnection new OleDbConnection provider Micr
  • 如何使程序的第二个实例将控制权传递回第一个实例?

    我已经用 Delphi XE3 创建了一个应用程序 我的应用程序有一个托盘图标 我为此使用 TCoolTrayIcon 因此当用户最小化它时 任务栏上没有图标 而仅在托盘图标上 为了避免我的应用程序出现多个实例 我使用以下代码 proced
  • 停止运行“worksheet_change”或 worksheet_calculate

    我有一张包含大量代码的工作表 该代码中有 worksheet change 和 worksheet calculate 函数 在某些过程中 在处理此工作表时 有时会不必要地运行此代码 是否有一行代码会阻止运行 worksheet chang
  • 将命令应用于所有提交

    为了收集有关 Git 存储库的一些统计信息 我正在寻找一种方法来执行以下操作 对于每个提交 执行一个命令 例如 du h 该命令应该在提交后从存储库基目录 按照它看起来的样子 运行 理想情况下 该命令可以访问提交哈希值和时间戳 一个用准 B
  • 如何从脚本本身获取 Bash 脚本所在的目录?

    如何获取某个目录的路径Bash脚本位于 inside那个脚本 我想使用 Bash 脚本作为另一个应用程序的启动器 我想将工作目录更改为 Bash 脚本所在的目录 这样我就可以对该目录中的文件进行操作 如下所示 application usr
  • findViewById 未定义

    Eclipse 将 findViewById int 标记为未定义 它对 getResources 做了同样的事情 但我能够通过调用 context getResources 来解决这个问题 如下所示 并且似乎无法为 findViewByI
  • 如何在android中的canvas中添加3张图片

    我有 3 张图像 我想将它们依次添加到画布上 这是我的代码 public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setConten
  • Xcode 10 似乎破坏了 com.apple.commcenter.coretelephony.xpc

    我已经升级到Xcode 10 on High Sierra现在激励广告示例项目来自 AdMob 的投诉com apple commcenter coretelephony xpc工作不正常 是否有我必须启用的新权利 我搜索了几个小时却没有任
  • 按两个属性对对象数组进行排序

    我有一个对象数组 我想按两个属性进行排序 提醒时间戳 修改时间戳 排序顺序 desc 按一个属性对这个对象进行排序不是问题 但在这种情况下我不知道如何让它工作 假设时间戳本身排序正常 例如 ISO8601 和相同时区 请尝试 myArray
  • 如何使用 Apple Symbols 字体中的字形?

    我想在我的应用程序中使用 Apple Symbols 字体中的一种字形 我在CharactersPallete 来自Snow Leopard 中打开这个字体 这个字形的 锁符号 id GID 是5003 它不是字形的unicode编号 如何
  • ShellExecuteEx 在 Excel VBA 中崩溃

    由于 Windows 更新发生 API 调用ShellExecuteEx sExecuteInfo 崩溃 说 0x75F7A529 处未处理的异常 shell32 dll 访问冲突 读取位置0x68686903 我不知道这里出了什么问题 你
  • 与 Tkinter 跟踪相关的回调函数有哪些限制?

    我试图弄清楚如何实现一个回调函数 它可以做一些比打印输出更有意义的事情 我相当缺乏经验 所以我不确定回调函数应该或可以如何在Python 或任何其他语言 中实现 考虑以下 Python 代码 from Tkinter import def