如何删除 Tkinter 网格布局中的整行

2024-06-21

我正在尝试使用 Tkinter 进行测试应用程序。我使用网格布局管理器创建了一个表,如下所示。有两个按钮 -Add row and 删除行. Add row按预期工作。我如何删除选定的行。我的想法是为每一行提供一个检查按钮,如下所示。并且可以删除每个选定的行。但我不知道如何准确地做到这一点以及是否可能。

在这种情况下有没有更好的方法来删除行?请提出解决方案。

CODE:

        from Tkinter import *
        import ttk
        from ttk import * 

        i =2

        def add_row():
            global i 
            var = IntVar()
            c = Checkbutton(root, variable = var)
            c.grid(row = i, column = 0)
            for j in range(1,5): #Columns

                    b = Entry(root)
                    b.grid(row=i, column=j)
            i =i+1 

        root = Tk()
        bt = ttk.Button(root , text = 'Add Row', command = add_row)
        bt.grid(row =0, column=0)


        dl = ttk.Button(root , text = 'Delete Row')
        dl.grid(row =0, column=1)

        v0 = StringVar()
        e0 = Entry(root, textvariable = v0, state = 'readonly')
        v0.set('Select')
        e0.grid(row = 1, column = 0 )

        v1 = StringVar()
        e1 = Entry(root, textvariable = v1, state = 'readonly')
        v1.set('Col1')
        e1.grid(row = 1, column = 1 )

        v2 = StringVar()
        e2 = Entry(root, textvariable = v2, state = 'readonly')
        v2.set('Col2')
        e2.grid(row = 1, column = 2)

        v3 = StringVar()
        e3 = Entry(root, textvariable = v3, state = 'readonly')
        v3.set('Col3')
        e3.grid(row = 1, column = 3 )

        v4 = StringVar()
        e4 = Entry(root, textvariable = v4, state = 'readonly')
        v4.set('Col4')
        e4.grid(row = 1, column = 4 )

        mainloop()

注意:我不想使用 tktable 或 treeview 来创建表。


为了删除小部件,您需要在创建它们时保留对它们的引用。

在下面的代码中,我创建了一个列表rows其中有一个子列表items对于每一行。每行包含对复选按钮和所有条目的引用。

When Delete Row按下后,该函数循环遍历列表并销毁激活了复选按钮的行中的所有项目,然后从列表中删除该条目。

Notes:

  • 我已经做了varcheckbutton 的属性,以便我们可以访问它以查看它是否已被选中 - 请参阅this https://stackoverflow.com/questions/4236910/getting-tkinter-check-box-state问题。

  • 您为每行创建了五次检查按钮;我已经把它从循环中取出来了。

  • I 向后迭代行列表 https://stackoverflow.com/a/529427/3714940,这样当一个项目是pop-ed,它仅更改已处理的行的索引。这意味着您可以一次删除多行。

from Tkinter import *
import ttk
from ttk import * 

i=2
rows = []

def add_row():
    global i 
    i=i+1
    items = []
    var = IntVar()
    c = Checkbutton(root, variable = var)
    c.val = var
    items.append(c)
    c.grid(row = i, column = 0)
    for j in range(1,5): #Columns
        b = Entry(root)
        items.append(b)
        b.grid(row=i, column=j)
    rows.append(items)

def delete_row():
    for rowno, row in reversed(list(enumerate(rows))):
        if row[0].val.get() == 1:
            for i in row:
                i.destroy()
            rows.pop(rowno)


root = Tk()
bt = ttk.Button(root , text = 'Add Row', command = add_row)
bt.grid(row =0, column=0)


dl = ttk.Button(root , text = 'Delete Row', command = delete_row)
dl.grid(row =0, column=1)

v0 = StringVar()
e0 = Entry(root, textvariable = v0, state = 'readonly')
v0.set('Select')
e0.grid(row = 1, column = 0 )

v1 = StringVar()
e1 = Entry(root, textvariable = v1, state = 'readonly')
v1.set('Col1')
e1.grid(row = 1, column = 1 )

v2 = StringVar()
e2 = Entry(root, textvariable = v2, state = 'readonly')
v2.set('Col2')
e2.grid(row = 1, column = 2)

v3 = StringVar()
e3 = Entry(root, textvariable = v3, state = 'readonly')
v3.set('Col3')
e3.grid(row = 1, column = 3 )

v4 = StringVar()
e4 = Entry(root, textvariable = v4, state = 'readonly')
v4.set('Col4')
e4.grid(row = 1, column = 4 )

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

如何删除 Tkinter 网格布局中的整行 的相关文章

  • Python Scrapy:“runspider”和“crawl”命令有什么区别?

    有人可以解释一下两者之间的区别吗运行蜘蛛 and crawl命令 应该在什么情况下使用它们 在命令中 scrapy crawl options
  • 在函数内的 for 循环上使用 tqdm 来检查进度

    我正在使用 for 循环迭代目录树内的一大组文件 这样做时 我想通过控制台中的进度条来监视进度 因此 我决定使用 tqdm 来实现此目的 目前 我的代码如下所示 for dirPath subdirList fileList in tqdm
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • Tkinter 将鼠标点击绑定到框架

    我一定错过了一些明显的东西 我的 Tkinter 程序中有两个框架 每个框架在网格布局中都有一堆标签 我想将鼠标点击绑定到其中一个而不是另一个 我目前使用 root bind
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 本地化:django-admin compilemessages 跳过 venv

    我正在使用本地化Django 1 11应用 我可以排除虚拟环境文件夹node modules文件夹 同时使用消息文件添加消息 i选项如 django admin makemessages l no i venv django admin m
  • 如何删除 Tkinter 网格布局中的整行

    我正在尝试使用 Tkinter 进行测试应用程序 我使用网格布局管理器创建了一个表 如下所示 有两个按钮 Add row and 删除行 Add row按预期工作 我如何删除选定的行 我的想法是为每一行提供一个检查按钮 如下所示 并且可以删
  • 仅接受一种文件类型

    from tkinter import filedialog as fd filename fd askopenfilename title Select file filetypes CSV Files csv All 打开文件夹以选择文
  • 导入 subprocess32 时出现问题

    我正在尝试通过 buildroot 安装 python 2 7 安装 subprocess32 它似乎安装正确 但当我将其导入嵌入式系统时 出现错误 gt gt gt import subprocess32 usr lib python2
  • 为什么框架的自然高度不立即更新?

    我正在编写一个小部件来显示一些文本行 通过Label in a Frame 并且一旦文本高度大于包含内容的高度 就需要调整字体大小Frame 为此 我正在查询 winfo reqheight 为了Label和Frame文本更新后 想法是减少
  • 为什么 tkinter 输入验证需要调用 register() ?

    def check the input only allows digits only inp A function for validating the input the purpose of this is to let the us
  • 如何为Python中的imagegrab库中的区域选择提供动态值

    使用此脚本 我尝试截取特定区域桌面的屏幕截图 使用 Tkinter gui 但使用此代码我只能截取桌面修复区域 框架 的屏幕截图 所以我想做的是尝试动态设置 imagegrab 的 bbox 的值 所谓动态 我的意思是它应该只捕获由鼠标光标
  • 跨多个模块的 Python 日志记录

    我正在尝试将日志记录 到控制台而不是文件 添加到我已经工作了一段时间的代码中 阅读了一些内容后 我有一个我认为应该可行的模式 但我不太确定我哪里出错了 我有以下三个文件 显然是简化的 控制器 py import my module impo
  • 如何在Python Idle中运行单元测试?

    我为我的单词出现 Gui 项目创建了一个 python 单元测试 我想测试前 5 个单词的出现情况 因此它应该返回一个真值 但是我不知道如何运行单元测试 我正在尝试使用空闲 shell 但我应该使用 Visual Studio 命令提示符
  • 装饰外部(库)函数的正确方法是什么?

    我在代码中多次使用库函数来测试通过 失败条件并相应地执行不同的代码 但由于某种原因 它找到的结果没有返回值 我想用装饰器添加它 以便我可以在代码中调用它 鉴于我无法编辑源文件 正确的方法是什么 我应该做这样的事情 def test pass
  • Pandas DataFrame - 列 whos dtype=='category' 上的聚合导致性能下降

    我使用内存使用量较高的大数据帧 并且我读到 如果更改重复值列上的数据类型 我可以节省大量内存 我尝试了一下 确实内存使用量下降了 25 但随后我遇到了我无法理解的性能缓慢问题 我对 dtype 类别 列进行分组聚合 在更改 dtype 之前
  • Python中Shift和Caps Lock的状态

    我正在使用 Python 2 5 编写 TkInter 应用程序 我需要找出大写锁定和 Shift 键的状态 true 或 false 我在整个网络上进行了搜索 但找不到解决方案 Tkinter 中的键盘事件可能很棘手 我建议您按顺序查看以
  • Python 2.7:测试字符串中的字符是否都是汉字

    下面的代码测试字符串中的字符是否都是中文字符 它适用于 Python 3 但不适用于 Python 2 7 我如何在 Python 2 7 中做到这一点 for ch in name if ord ch lt 0x4e00 or ord c
  • 当顶级窗口打开时隐藏根窗口,并在顶级窗口被销毁时使其重新出现

    如何在第二个窗口打开时隐藏主窗口 然后在第二个窗口关闭时使主窗口重新出现 我了解withdraw 和deiconify 的用法 但不知道如何在这种情况下应用它们 这样做的原因是最终创建一个程序 其中主窗口充当菜单 当从其中打开其他窗口时隐藏

随机推荐

  • jquery 通过 div 选择复选框

    我想知道 jQuery 中是否有一种方法可以在有人单击整个 div 层时选中 取消选中复选框 本质上就像有一个巨大的选择区域 有任何想法吗 这是一个例子 我试图使复选框周围可单击以切换单个复选框 几乎如此 fieldset div div
  • 我可以在 C# 11 中仅为一个成员设置 SetsRequiredMembers 或其他属性吗?

    考虑以下代码 public record Foo public required string A get init public required string B get init public record Bar Foo publi
  • 如何在Android中隐藏应用程序标题? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想隐藏应用程序标题栏 您可以通过编程来完成 import android app Activity import android os
  • libtiff 错误:未配置旧式 JPEG 压缩支持

    在 Mac OS X 上使用 libtiff 将 TIFF 转换为 BMP 时 出现以下错误 scannerdata tif Old style JPEG compression support is not configured scan
  • Mathematica 使用符号而不是数字调用 NMinimize?

    我在使用时注意到以下行为NMinimize在数学中 目标函数的第一次调用是使用变量名称 而不是像人们所期望的那样使用空间中的点 因此 例如 如果我的目标函数是一个模块 则该模块仅被调用一次 进行符号评估 然后在进一步的迭代中 使用变量空间中
  • 是否有控制输出页面方向的选项(使用 knit->pander->pandoc->docx)

    我正在玩Tal s http www r statistics com 2013 03 write ms word document using r with as little overhead as possible 介绍如何在现实情况
  • 改进OpenGL粒子系统

    我正在寻找一种提高粒子系统性能的方法 因为它在 FPS 方面的成本非常高 这是因为我打电话 glDrawElements GL TRIANGLE STRIP mNumberOfIndices GL UNSIGNED SHORT 0 我为应用
  • UnsupportedOperationException:特权进程中不允许使用 WebView

    我在用android sharedUserId android uid system 在我的清单中获得一些不可避免的权利 从 HDMI 输入读取安卓盒子 http eweat manufacturer globalsources com s
  • 是否可以覆盖 javaScript 原始数据类型?

    问题是不言自明的 我知道可以扩展原始数据类型 例如string但有可能覆盖它吗 这是在采访中被问到的一个问题 不 你不能覆盖任何东西 Ecma脚本定义原始类型 http es5 github com x4 3 2 Undefined Nul
  • 向对象添加元素

    我需要填充一个 json 文件 现在我有这样的东西 element id 10 quantity 1 我需要添加另一个 元素 我的第一步是使用该 json 将该 json 放入对象类型中cart JSON parse 现在我需要添加新元素
  • 禁用 Eclipse 的错误发现。 (Codan 误报)

    到目前为止我的经验是 Eclipse 的错误发现是可怕的错误 没有任何解决方案 尝试过 GXX EXPERIMENTAL CXX0X std c 0x std c 11在设置的每个点附近 我现在不想再寻找解决方案了 现在我只想看到真正的编译
  • 当您从不同的视图控制器进行segue时,如何将数据从一个视图控制器保存(追加)到另一个视图控制器?

    抱歉 问题有点长 请多多包涵 基本上 我正在尝试使用 swift 编写一个简单的递增 递减 ios 应用程序 我有三个主视图控制器 一个是 初始视图控制器 即根视图控制器 仅包含两个按钮 一个以模态方式呈现到实际计数页面 第二个视图控制器
  • 如何在 AngularJS 中获得更多堆栈跟踪

    我正在使用装饰器来更改 exceptionHandler行为 将日志发送到服务器 我的问题是异常的堆栈跟踪似乎毫无用处 仅显示堆栈的一部分 例如 语法错误 标记 未定义 不是列 NaN 处的主表达式 表达式 此处的表达式 at Error
  • 获取动画滚动视图的当前位置

    我遇到了以下问题 我对 uiscrollview 进行了子类化 其中 contentOffset 通过以下代码进行动画处理 UIView animateWithDuration 1 0 delay 1 0 options options a
  • VS 2015 中的 T4 模板

    如何得到T4模板支持视觉工作室 2015 在 VS 2015 中 文件属性不允许指定要标记的 tt 文件并允许从上下文菜单运行 我使用的是 VS 2015 CTP6 尝试过 VS2015 Ultimate CTP6 和 T4 支持 以及调试
  • 有没有办法在 Eclipse Package Explorer 中嵌套包? [复制]

    这个问题在这里已经有答案了 我一直在寻找答案 谢谢 在包资源管理器中打开视图菜单 在那里你可以改变包装介绍 from Flat to 分层的 我想这就是你要找的
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • 如何向已建立的 SVN 存储库添加标签/主干/分支?

    假设您有一个已建立的 SVN 存储库 有数百个修订版本 并且已经存在一年多了 存储库在顶层没有标准标签 主干和分支 相反 它只是直接进入代码 有没有办法添加进去tags trunk and branches到顶层的存储库而不只是检查整个存储
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • 如何删除 Tkinter 网格布局中的整行

    我正在尝试使用 Tkinter 进行测试应用程序 我使用网格布局管理器创建了一个表 如下所示 有两个按钮 Add row and 删除行 Add row按预期工作 我如何删除选定的行 我的想法是为每一行提供一个检查按钮 如下所示 并且可以删