为什么这些 Python tkinter 检查按钮是链接的?

2023-12-13

我目前正在尝试创建一个 GUI 来比较两个不同文件夹之间的文件,并拥有一个我现在正在尝试构建的基本框架。

我在窗口的左侧、右侧和底部有三个框架,每个框架有两个复选按钮。我希望能够彼此独立地选择每个复选按钮,但每次我单击任何一个框架的第一个复选按钮时,其他框架的第一个复选按钮也会同时选择/取消选择。

为什么会出现这种情况,如何让它们彼此独立工作?这是我的代码供参考:

from tkinter import *

root = Tk()

leftFrame = Frame(root, bg = "#4d94ff")
leftFrame.pack(side = LEFT, fill = BOTH)

rightFrame = Frame(root, bg = "#ff4d4d")
rightFrame.pack(side = RIGHT, fill = BOTH)

bottomFrame = Frame(root, bg = "#5cd65c")
bottomFrame.pack(side = BOTTOM)

check_L1 = Checkbutton(leftFrame, text = "C1", bg = "#4d94ff")
check_L2 = Checkbutton(leftFrame, text = "C2", bg = "#4d94ff")

check_R1 = Checkbutton(rightFrame, text = "C1", bg = "#ff4d4d")
check_R2 = Checkbutton(rightFrame, text = "C2", bg = "#ff4d4d")

checktype1 = Checkbutton(bottomFrame, text = "Check Type 1", bg = "#5cd65c")
checktype2 = Checkbutton(bottomFrame, text = "Check Type 2", bg = "#5cd65c")

check_L1.grid(row = 0)
check_L2.grid(row = 0, column = 1)
check_R1.grid(row = 0)
check_R2.grid(row = 0, column = 1)
checktype1.grid(row = 0)
checktype2.grid(row = 1)


root.mainloop()

TL;DR

您需要指定一个唯一的variable与每个复选按钮。

var_L1 = tk.IntVar()
var_R1 = tk.IntVar()
...
check_L1 = Checkbutton(..., variable=var_L1)
check_R1 = Checkbutton(..., variable=var_R1)
...

怎么了

检查按钮需要一个与其关联的变量。您没有显式设置变量,因此 tkinter 正在创建默认值。 Tkinter 通过创建以复选按钮名称命名的内部变量来实现此目的。

当您创建小部件并且不给它们命名时,tkinter 将选择默认名称。全名包括整个小部件层次结构的名称。例如,内部名称为check_L1 is .!frame.!checkbutton',名称为check_R1 is .!frame2.!checkbutton,以及内部名称checktype1 is '.!frame3.!checkbutton'.

当 tkinter 为复选按钮创建默认变量时,它仅使用变量全名的最后一个组成部分。因此,对于check_L1它创建一个名为的内部变量!checkbutton。内部变量为check_R1也是!checkbutton,内部变量也是checktype2.

因为所有这些检查按钮共享相同的内部变量,所以它们是链接的。


注意:如果您在循环中创建大量复选框,则可以将每个复选框的引用保存在数组中。例如:

vars = []
for i in range(x):
    vars.append[tk.IntVar())
...
check_L1 = Checkbutton(..., variable=vars[0])
...
print(f"the value of L1 is {vars[0].get()}")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这些 Python tkinter 检查按钮是链接的? 的相关文章

随机推荐

  • 如何从应用程序调用关闭电源、重新启动对话框?

    当从我的应用程序中长按电源按钮时 我想调用关闭电源 重新启动等对话框 与默认的 Android 对话框相同 我不需要从我的应用程序中直接调用重新启动 关闭电源等 只是想调用该对话框 怎么称呼呢 或如何在应用程序上发送电源按钮键 提前致谢 如
  • Nuxt.js - 是否可以将自定义路径/基设置为静态文件的网址?

    TLDR 如何更改静态文件路径src nuxt
  • 从 .idea 文件夹中忽略什么?

    可能的重复 Intellij Idea 9 10 要签入 或不签入 源代码管理的哪些文件夹 我开始使用 WebStorm 进行 Web 开发 但不确定要添加什么以及要从我们的 Git 存储库中排除什么 显然里面有一些文件 idea文件夹旨在
  • 更改 DataGridViewRow 的轮廓

    如果满足某个条件我想改变轮廓DataGridViewRow蓝色使其脱颖而出 我知道这不是BackColor因为它改变了行的背景颜色 我尝试过改变ForeColor为蓝色但没有任何变化 我不相信这是选择风格 因为这种行为不是我想要的 有什么建
  • WPF:如何使 DataGrid 与动态列的绑定可编辑?

    我需要将一些数据绑定到具有可变列数的 DataGrid 我使用以下代码使其工作 int n 0 foreach string title in TitleList DataGridTextColumn col new DataGridTex
  • 在 Android 上将 HTML 转换为图像(任何格式)[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 有谁知道如何在Android上将html代码 其中包含图像 转换为图像 我知道如何使用 JLabel JEditorPane 和 BufferedImage 在 Java 上实现它 但
  • 具有不可移动、默认可构造值类型的 map/unordered_map

    Update 出现在23 5 4 3中here那m 1 版本应该有效 Update2 m 1 正在使用 gcc4 9 1 具体来说 std mutex 假设我想要一个std unordered map
  • Javascript InnerHTML 删除表单元素中的数据

    我有一个带有按钮的表单 允许您向表单添加字段
  • 如何正确取消初始化 OpenSSL

    在我的 OpenSSL 客户端中 我遇到的问题是 当我选择静态链接 libeay32 和 ssleay32 而不是动态链接时 我从 Visual Leak Detector 收到了大量内存泄漏错误 我从 OP 中复制了命令这个线程 但我还剩
  • R 中多个数据帧的相同功能

    我是 R 新手 这是一个非常简单的问题 我发现了很多与我想要的类似的东西 但并不完全一样 基本上我有多个数据框 我只想在所有数据框上运行相同的函数 for 循环可以工作 但我不确定如何正确设置它来调用数据帧 它似乎也最喜欢使用 R 的 la
  • php exec() 命令权限被拒绝

    我有一个 C 可执行文件 skypeforwarder 如果我在 Mac 的终端中使用命令行 skypeforwarder 就可以工作 亨利 Users henry Desktop skypeForwarder skypekit sdk s
  • 如何按照请求的顺序处理 jquery ajax 请求

    我正在制作一个 java servlet 页面 用于检查域名列表 并通过 jquery ajax 请求检查每个名称 除了结果被乱序附加到 DOM 之外 它工作得很好 什么是按请求顺序处理请求但又像长轮询效果一样异步的最佳方法 我是 Java
  • 在启动时通过UAC授予c++程序管理权限

    所以我做了一些研究 但我有兴趣了解如何让他的程序在执行之前向 UAC 请求管理权限 这是否需要在 ShellExecute 中使用 runas 我意识到这是我在编程冒险中需要理解的事情 因为几乎我安装的每个程序都问过我这个问题 例如 如果我
  • 如何将整数转换为日期对象Python?

    我正在 python 中创建一个模块 在其中我收到整数格式的日期 例如20120213 表示 2012 年 2 月 13 日 现在 我想将这个整数格式的日期转换为 python 日期对象 另外 是否有任何方法可以减去 添加此类整数格式日期中
  • Android R 中的后台服务在省电模式下停止

    我编写了一个 Android 应用程序 通过更改电量来检查电池电量 并在电量达到特定值时发出警报 我在我的应用程序中使用了广播接收器和后台服务 它在所有 Android 版本中都能正常工作 但在 Android R 中 当打开省电模式时 服
  • 是否可以重命名 Firebase 实时数据库中的密钥?

    我想知道有没有办法更新键值 让我们使用以下数据 我正在使用 set 来写入数据 现在 我希望用户编辑他们的bookTitle两个地方都需要改变 我尝试使用 update 但似乎无法使其工作 我只能编辑bookTitle in bookInf
  • 使用 Angular 7 Material CDK 进行嵌套拖放

    我有一个拖放列表的嵌套树 不是树组件 当拖动另一个下拉列表中包含的下拉列表中的项目时 两个下拉列表都会触发 Enter Exit 事件 这意味着当一个项目被删除时 它可以被放入内部下拉列表或容器下拉列表中 具体取决于它被删除的地方 注意 这
  • 共同的偏好和清晰的历史/数据

    如果我在android中使用sharedpreference在应用程序的生命周期内将数据本地存储在设备上 直到应用程序被卸载 当用户选择从android的 gt 菜单 gt 设置 gt 清除数据 时是否有丢失数据的风险管理应用程序 gt 清
  • Java 使用 JDBC - 连接太多?

    我正在为一家酒吧编写一个库存补货系统 作为我的最后一年项目 我可以从 MYSQL 数据库检索信息 并且可以一次滚动浏览一个结果 我正在尝试根据所选类别更改结果 我已经设法使用组合框来实现此目的 但在类别之间移动时出现以下错误 线程 main
  • 为什么这些 Python tkinter 检查按钮是链接的?

    我目前正在尝试创建一个 GUI 来比较两个不同文件夹之间的文件 并拥有一个我现在正在尝试构建的基本框架 我在窗口的左侧 右侧和底部有三个框架 每个框架有两个复选按钮 我希望能够彼此独立地选择每个复选按钮 但每次我单击任何一个框架的第一个复选