Python Tkinter 两个按钮的一个回调函数

2023-12-14

我已经寻找这个问题的答案很长时间了,但仍然没有找到任何东西。我正在使用 Tkinter 创建一个 GUI,并且我有两个按钮,除了从不同的小部件接收信息之外,它们基本上执行相同的操作。一个按钮用于条目小部件,另一个按钮用于列表框小部件。 这两个按钮的回调函数很长(大约200行),所以我不想为每个按钮提供单独的函数。我在这个回调函数的开头有 if 语句来检查单击了哪个按钮,然后代码将采用相应的值。但我不确定以下代码是否显示了执行此操作的正确方法,因为显然它在我的程序中不能完美工作。回调函数仅在第一次起作用,如果我单击其他按钮,我将收到错误。这是我创建的示例代码来说明这个想法。请注意,我想检查按钮是否被单击,我不想检查“值”是否存在。请帮忙。

from Tkinter import *

root = Tk()

def DoSomething():
    # is this the right way to check which button is clicked?
    if button1:
        value = user_input.get()
    elif button2:
        value = choice.get(choice.curselection()[0])

    # then more codes that take 'value' as input.


button1 = Button(master,text='Search',command=DoSomething)
button1.pack()
button2 = Button(master,text='Search',command=DoSomething)
button2.pack()

user_input = Entry(master)
user_input.pack()
choice = Listbox(master,selectmode=SINGLE)
choice.pack()
#assume there are items in the listbox, I skipped this portion

root.mainloop()

如果你想将实际的小部件传递到回调中,你可以这样做:

button1 = Button(master, text='Search')
button1.configure(command=lambda widget=button1: DoSomething(widget))
button2 = Button(master, text='Search')
button2.configure(command=lambda widget=button2: DoSomething(widget))

如果您确实不需要对小部件的引用,另一种选择是简单地传递文字字符串:

button1 = Button(..., command=lambda widget="button1": DoSomething(widget))
button2 = Button(..., command=lambda widget="button2": DoSomething(widget))

另一种选择是为每个按钮提供唯一的回调,并让该回调仅执行该按钮特有的操作:

button1 = Button(..., command=ButtonOneCallback)
button2 = Button(..., command=ButtonTwoCallback)

def ButtonOneCallback():
    value = user_input.get()
    DoSomething(value)

def ButtonTwoCallback():
    value=choice.get(choice.curselection()[0])
    DoSomething(value)

def DoSomething(value):
    ...

还有其他方法可以解决相同的问题,但希望这能让您大致了解如何将值传递给按钮回调,或者如何避免首先需要这样做。

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

Python Tkinter 两个按钮的一个回调函数 的相关文章

随机推荐

  • AttributeError:QDialog对象没有属性setCentralWidget

    我正在尝试使用 QT Designer 创建 GUI 我已使用以下教程将 ui 设计器文件转换为 py 文件 http pyqt sourceforge net Docs PyQt5 designer html 我有以下代码 Created
  • 如何知道我的 WPF 应用程序可以播放哪些视频格式?

    我有一个允许播放视频的小应用程序 首先 我不限制用户选择特定类型的文件 我想要做的是确保我可以播放用户选择的文件 如何获取可用编解码器的列表 或查询 WPF 应用程序的播放质量 MediaElement控制 建议的替代方案是在播放之前将任何
  • 使用 Java 8 中的泛型方法对集合进行排序

    以下方法执行排序 public List
  • 每次需要重新绘制时,如何抓取 qwidget /将其渲染在像素图中?

    我有一个 QWidget 我不想在屏幕上显示 相反 我想在每次重新绘制小部件时获取该小部件的像素图 以便将其发送到我正在处理的应用程序的另一部分 API 提供了两种方法来执行此操作 QPixmap grabWidget and QWidge
  • 按关键字进行惯用的 clojure 映射查找

    假设我有一个使用关键字作为键的 clojure 映射 def my car color candy apple red horsepower 450 我知道我可以通过使用关键字或映射作为函数并将另一个作为其参数来查找与关键字关联的值 my
  • Delphi 2009 中的通用 TList<> 在 IndexOf 上崩溃

    我已经看到很多关于 Delphi 2009 泛型中错误的提及 但从未预料到如此基本的东西会在 Update 3 中失败 同样如此 如果列表包含 1 个或多个项目 则在通用 TList 或 TObjectList 上调用 IndexOf 会导
  • 将 R 中的矩阵顺时针旋转 90 度

    我在 R 中有一个这样的矩阵 1 2 3 1 2 3 1 2 3 有没有一种简单的方法可以将整个矩阵顺时针旋转 90 度以获得这些结果 1 1 1 2 2 2 3 3 3 再次旋转 90 度 3 2 1 3 2 1 3 2 1 t不旋转条目
  • EXCEPTION_ACCESS_VIOLATION 崩溃的可能原因是什么?

    当我使用 Eclipse 运行项目的 java bean 时 我收到此崩溃报告 我完全不知道它是什么以及如何调试 谁能告诉我调试这个的可能方法 An unexpected error has been detected by Java Ru
  • 在 .NET 运行时解析 JSON

    我想从 WebServer 得到一些响应 返回的数据如下所示 3014887 string1 string http num60 webservice com u3014887 b c9c0625b jpg 0 3061529 string
  • 在树结构上实现 IEnumerable

    基于这些人的工作 http dvanderboom wordpress com 2008 03 15 treet implementing a non binary tree in c http www matthidinger com a
  • Python 线程。如何锁定线程?

    我试图了解线程和并发的基础知识 我想要一个简单的情况 其中两个线程重复尝试访问一个共享资源 代码 import threading class Thread threading Thread def init self t args thr
  • 使用Scrapy抓取时无法在源代码中找到显示的数据

    我在 Windows Vista 64 位上使用 Python org 版本 2 7 64 位 我使用 Scrapy 和正则表达式的组合从以下页面中名为 DataStore Prime 的 Javascript 项目中提取信息 http w
  • 未终止的字符串文字/无效或意外的标记

    为什么我会 语法错误 未终止的字符串文字 in Firefox and 未捕获的语法错误 无效或意外的标记 in Chrome当我跑 document ready function function addJSBeforeEndBody c
  • 如何在一次 jQuery 调用中在两个文本之间切换?

    假设你有一个 click 称呼 你可以在里面写什么代码 click 调用 以便每次单击所选元素时 都会更改两个字符串之间的文本 我假设 toggle and text 会在这里发挥作用 尝试按照以下思路进行操作 element bind c
  • 同时播放两种声音

    有没有办法同时播放两种声音 我知道SoundPlayer无法做到这一点 我不能使用SoundEffect因为我相信它只是 XNA 的一部分 所需的两个声音将在未知且随机的时间被调用 声音播放后需要进行控制 即 声音必须能够在播放完毕之前停止
  • 在 Android 的导航栏顶部绘制位图

    在我的应用程序中 我需要在所有正在运行的应用程序之上绘制一个位图 我创建了一个不可见的视图 并覆盖在所有应用程序之上 使用此覆盖视图 我可以在给定位置绘制位图 但无法在导航栏顶部绘制位图 我使用了以下布局参数 WindowManager L
  • sphinx可以链接到不在根文档下面的目录中的文档吗?

    我正在使用 Sphinx 来记录一个非 Python 项目 我要分发 doc每个子模块中的文件夹 包含submodule name rst文件来记录该模块 然后 我想将这些文件吸收到主层次结构中 为整个设计创建规范 I e Project
  • 使用 itext 的 XML 工作器

    import java io FileOutputStream import java io StringReader import com itextpdf text Document import com itextpdf text P
  • 为什么 Thread.interrupt() 不能中断尝试获取锁的线程

    Thinking in Java 一书中写道 Thread interrupt 无法中断尝试获取同步锁的线程 我想知道为什么 阻塞操作只有在声明为抛出异常时才能被中断InterruptedException 显然 一个synchronize
  • Python Tkinter 两个按钮的一个回调函数

    我已经寻找这个问题的答案很长时间了 但仍然没有找到任何东西 我正在使用 Tkinter 创建一个 GUI 并且我有两个按钮 除了从不同的小部件接收信息之外 它们基本上执行相同的操作 一个按钮用于条目小部件 另一个按钮用于列表框小部件 这两个