tkinter:将多个按钮 lambda 映射到一个标签?

2023-12-03

描述:我希望能够单击一个按钮并将其值发送到标签小部件(lab_1),我知道要执行一个按钮,您必须使用command=lambda: lab_1.configure(text=0)但是当我使用了一个标签时,你会如何将值打印到标签上for循环在嵌入列表中创建我的所有按钮。截至目前,所有按钮都有名为的变量key_press.

简化的问题:

  • 如何将所有值写入我的标签(lab_1)?

  • 你如何使用for循环,因此每次单击该按钮时,它都会向Label?


import tkinter as tk

root = tk.Tk()
# Change the original tkinter icon
root.iconbitmap('C:\\Users\\bmxfi\Downloads\images.ico')
# Set the title of the window
root.title('Calculator')
# Change the geometry of the window
root.geometry('300x450+750+150')
# Setting Minimum and Maximum window width and height
root.minsize(width=300, height=450)
root.maxsize(width=300, height=450)
# Create Rows and Columns to display widgets
root.rowconfigure(0, weight=100)
root.rowconfigure(1, weight=100)
root.rowconfigure(2, weight=100)
# Columns start here:
root.columnconfigure(0, weight=100)
root.columnconfigure(1, weight=100)
root.columnconfigure(2, weight=100)
# Configuring the Main window named: root
root.configure(bg='#353535')
# Creating the main label that will display the calculated results
lab_1 = tk.Label(root, width=40)
lab_1.grid(row=0, column=1, columnspan=1, sticky='we')
lab_1.configure(bg='#545454', font=('Computer Modern', 25, 'bold'),
                fg='White', justify='right')
# Main Calculator Layout
# List Box for a calculator layout
box_1 = tk.Listbox(root)
box_1.grid(row=1, column=1, rowspan=2)
box_1.configure(bg='#353535', relief='flat')
# Button Layout
calculator_layout = [[(7, 1), (8, 1), (9, 1), ('(', 1), (')', 1)],
                     [(4, 1), (5, 1), (6, 1), ('×', 1), ('÷', 1)],
                     [(1, 1), (2, 1), (3, 1), ('+', 1), ('-', 1)],
                     [(0, 1), ('±', 1), ('.', 1), ('-', 1), ('=', 1)]]

# Iterating through my list to get a set of buttons
row = 0
for i in calculator_layout:
    col = 0
    for a in i:
        key_press = tk.Button(box_1, text=a[0])
        key_press.grid(row=row, column=col, ipadx=10, ipady=8, sticky='we')
        key_press.configure(background='#545454', fg='white',
                            font=('Computer Modern', 10),
                            activebackground='red', state='normal')
        col += a[1]
    row += 1

root.mainloop()

你可以通过给出lambda each Button具有默认值的参数。不需要任何额外的for循环以这种方式执行(它是在创建Buttons).

下面显示了如何做到这一点# CHANGED评论。每个中的其余代码lambda函数定义的每个重新配置text的选项Label named lab_1通过调用其configure()方法并将其当前内容传递给text带有相关符号的选项Button附加到它。

...

# Iterating through my list to get a set of buttons
row = 0
for i in calculator_layout:
    col = 0
    for a in i:
        key_press = tk.Button(box_1, text=a[0])
        key_press.grid(row=row, column=col, ipadx=10, ipady=8, sticky='we')
        key_press.configure(background='#545454', fg='white',
                            font=('Computer Modern', 10),
                            activebackground='red', state='normal',
                            # CHANGED.
                            command=lambda sym=str(a[0]):
                                lab_1.configure(text=lab_1.cget('text')+sym))
        col += a[1]
    row += 1

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

tkinter:将多个按钮 lambda 映射到一个标签? 的相关文章

随机推荐

  • Android:如何在 root 设备上执行 chmod

    我将在已取得 root 权限的 Android 2 1 设备上执行命令 字符串路径 data data com android providers settings databases settings db Runtime getRunt
  • Android:警报管理器

    这是代码 public void startAlarm Context context Intent intent new Intent context SyncService class PendingIntent sender Pend
  • Spring Java 配置包装注入的地图

    我最近从使用 Spring 的 XML 配置切换到使用 Java 配置 并且遇到了一个奇怪的问题 XML 配置是
  • 在一个程序集中序列化,然后在另一个程序集中反序列化?

    我在两个项目中有相同的课程 其中一个项目正在发送runtime到另一个进程 该进程必须反序列化该对象并使用它 假定两个对象相同但程序集名称不同 因此它们实际上被解释为两种不同的类型 根据我的研究 我提出了那些由于以下原因而不起作用的解决方案
  • 响应通知后按下后退按钮返回上一屏幕

    我正在使用类似的代码创建一个简单的通知创建并显示来自网络调用的通知 问题是 我希望响应通知的活动完成其业务 然后单击后退按钮 将先前活动的活动放回前台 并保持其后堆栈完好无损 这与之前的活动活动是我的应用程序还是其他人的应用程序的一部分无关
  • 从java以编程方式执行spark-submit

    我试图通过以下方式执行它 Process process Runtime getRuntime exec spark cmd 没有运气 通过 shell 运行的命令启动了我的应用程序 该应用程序成功了 通过 exec 运行它会启动一个进程
  • 如何在 Skyfield 中添加 JulianDate 对象或偏移

    The JulianDate对象在Skyfield是一种快速生成并保存一组儒略日时间值并将其传递给 Skyfield 的简便方法at 计算各种坐标中天文位置的方法 参见示例脚本 但是 我似乎找不到add or offset方法 以便我可以将
  • 如何删除/更新bigquery中的嵌套数据

    有没有办法删除 更新bigquery中的嵌套字段 假设我有这个数据 wives age wives name name 21 angel adam 20 kale 21 victoria rossi 20 jessica 或者在 json
  • 如何删除所有包含某个子字符串的PHP数组元素? [复制]

    这个问题在这里已经有答案了 好吧 我查了一些函数 但我似乎没有幸运地找到任何函数 我想过滤一个数组以删除包含某些字符串的特定数组 这是一个例子 array 1 gt January 2 gt February 3 gt March to r
  • jQuery document.createElement 等效吗?

    我正在重构一些旧的 JavaScript 代码 并且正在进行大量 DOM 操作 var d document var odv d createElement div odv style display none this OuterDiv
  • 从以 http 运行的网站使用 https 访问 CDN

    我正在开发一个网站 该网站将采用http 我试图包含来自 google cdn 的 jquery 给出的答案here says 使用协议相关的 URL 可让您轻松避免混合内容 安全错误 from 谷歌CDN 它被视为 我们建议您通过 HTT
  • 什么是指向数组数据开头的 Python 缓冲区对象?

    A np arange 12 B A reshape 3 4 A 0 42 print B print A print np may share memory A B print A data B data 运行上面的代码 令我惊讶的是pr
  • Cordova 网络 isOnline 仅在 WiFi 上返回 true

    以下仅当我有 WiFi 时才注销 在 4g 或任何移动互联网类型上则不然 看起来不太靠谱 有什么更好的检测在线 离线状态的想法吗 rootScope on cordovaNetwork online function event netwo
  • 尝试将 XInclude 与 Java 结合使用并使用 xml:id 解析片段

    我一直在尝试让 XInclude 在我的 XML 文档中工作 最后让它在 Oxygen XML 中工作 我用 Oxygen XML 来编写 XML 文档 然后我转到我的应用程序 用 Java 编写 但它似乎不支持任何形式的 XPointer
  • 将 pandas 中的列表拆分为列

    我有一个像这样的数据框 df pd DataFrame ID ID1 ID2 ID3 Values AB BC np NaN AB CD df ID Values 0 ID1 AB BC 1 ID2 NaN 2 ID3 AB CD 我想将列
  • MssqlHook气流连接

    我是使用气流的新手 我需要做的是使用 MssqlHook 但我不知道如何使用 我应该在构造函数中给出哪些元素 我在气流中有一个名为connection test的连接 我不完全理解类中的属性 class MsSqlHook DbApiHoo
  • 计算多个数据集的日、月和年平均值

    我有一个数据框 MS NR SS NR DATE HOUR VALUE 1 13095010 68 1 01 2014 0 00 00 9 8 2 13095010 68 1 01 2014 1 00 00 8 0 3 13095010 6
  • css3背景大小:覆盖在调整大小时留下空白

    body margin 0 padding 0 position relative background url images imgs backgrnd png no repeat background size cover The ba
  • 用逗号分割字符串但忽略双引号内的逗号?

    我有一些如下所示的输入 A B C D12121 E F G H I9 I8 J K 逗号分隔的值可以按任何顺序 我想用逗号分隔字符串 但是 如果双引号内有某些内容 我需要它忽略逗号并删除引号 所以基本上 输出将是这个字符串列表 A B C
  • tkinter:将多个按钮 lambda 映射到一个标签?

    描述 我希望能够单击一个按钮并将其值发送到标签小部件 lab 1 我知道要执行一个按钮 您必须使用command lambda lab 1 configure text 0 但是当我使用了一个标签时 你会如何将值打印到标签上for循环在嵌入