首页 > 其他分享 >_tkinter.TclError: invalid command name ".!label.!text" 原因及方法

_tkinter.TclError: invalid command name ".!label.!text" 原因及方法

时间:2023-09-11 11:56:44浏览次数:43  
标签:box TclError tkinter name text 文本框 boxes tk btn

文本框对象报错 _tkinter.TclError: invalid command name ".!label.!text"

具体背景:创建txt文本框,用for循环去创建文本框,然后全局变量接受文本框对象,重复进入界面后就出现错误提示

提示对象名无效,回去翻看代码得出原因,下列是源代码

text_boxes = []  # 外部数组用于存储文本框对象

def btn_click(btn_num):
    # 转换为大写
    content = str(text_boxes[btn_num].get("1.0", tk.END+"-1c"))  # 获取文本框内容的起始位置为1.0到末尾(END)

    if (btn_num == 0):
        text_box_update(1, content.encode("utf-8"))
        text_box_update(2, content.encode("unicode_escape"))
        text_box_update(3, content.encode("gb2312"))

def encode_transform(frame):
    
    labels = ["字符串:", "UTF-8:", "Unicode:", "GB2312:"]
    btn_labels = ["转为编码", "转为字符串", "转为字符串", "转为字符串"]

    button_bg = "#D4D4D4"  # 按钮的背景色
    button_fg = "#000000"  # 按钮的前景色

    for i in range(0, 4):
        # 标签
        label = tk.Label(frame,
                         text=labels[i],
                         font=("Microsoft YaHei", 12),
                         anchor=tk.W)
        label.grid(row=i, column=0, padx=5, pady=5, sticky=tk.W)

        # 创建文本框
        text_box = tk.Text(frame, 
                           font=("Microsoft YaHei", 12), 
                           width=40, 
                           height=8)
        text_box.grid(row=i, column=1, padx=5, pady=5, sticky=tk.NSEW)

        text_boxes.append(text_box)  # 将文本框对象添加到外部数组中
        print(f"Text box: {text_box}")

        # 按钮
        button = tk.Button(frame, text=btn_labels[i], 
                           font=("Microsoft YaHei", 12), 
                           width=15, 
                           bg=button_bg,
                           command=lambda btn=i: btn_click(btn))
        button.grid(row=i, column=2, padx=5, pady=5)

原因描述:

text_boxes 是一个全局变量,在创建界面的时候,for循环去创建文本框,然后用text_boxes去接收变量,但是!很关键的一个点,首先是在使用时,忘了去对对象进行一个断言,其次是在for循环里面,我是用text_boxes.append,追加到数组里面的,也就是说,如果我多次去重复进入for,那就会从

text_0 一直到 text_n, 但是实际操作又是只有text_0 到 text_4,实际这四个对象在第二次进界面就被覆盖掉了

解决方法:(以下方法任意都可)

  • 在使用对象的地方加个判断,为空不操作

    def btn_click(btn_num):
        if not text_boxes[btn_num].winfo_exists():
            print("obj is unvalid")
            return
    
  • 在for前面对text_boxes数组进行清空

    text_boxes.clear()
    
  • 不使用追加方法

    text_boxes[i] = text_box
    

标签:box,TclError,tkinter,name,text,文本框,boxes,tk,btn
From: https://www.cnblogs.com/npjxcc/p/17693144.html

相关文章

  • Hive表分区查询show partitions tablename
    Hive表分区查询showpartitionstablenameSparkSql:%sqlshowpartitionsgrainfo;......
  • 【RocketMQ】启动NameServer和Broker报错Unrecognized VM option ‘UseConcMarkSweepG
    问题描述启动RocketMQNameServer和RocketMQBroker报错。mqnamesrv.cmdUnrecognizedVMoption'UseConcMarkSweepGC'Error:CouldnotcreatetheJavaVirtualMachine.Error:Afatalexceptionhasoccurred.Programwillexit.mqbroker.cmd[0.004s][warning][gc]......
  • 输入jps命令发现缺少namenode进程--同时猜想hive启动失败是由于缺少namenode进程的原
    问题描述且问题解决杀死9000端口:kill-99000然后查看9000端口的进程是否还在:netstat-anp|grep9000然后尝试再次开启hadoop集群:再尝试开启hive服务:问题解决!......
  • tkinter-分值计算器
    importtkinterastkfromtkinterimportmessageboxdefcalculate_security_operation_score(alerts_4h=0,alerts_24h=0,alerts_12h=0,alerts_72h=0,unresolved_tickets=0,high_severity_vulns=0,medium_severity_vulns=0......
  • 成功解决:Invalid encoding name “UTF8“
    文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享?踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。前言出现这个问题可能由于不同的原因、本文是由于**Mapper.xml文件中设置的编码格式问题,需要将encoding="UTF8"改......
  • odoo 如何传递context到name_get 方法
    xml需要按照如下写法:看move_id字段,要点是要在关键字前边加一个default_,这个本来是用来创建时指定默认值的,目前就这么用吧<treeeditable="top"create="0"><fieldname="product_id"options="{'no_create�......
  • ​​if __name__ == '__main__':​​
    if__name__=='__main__':是Python中一个常用的语句块,它的主要作用是在一个Python文件中定义一些代码,这些代码只有在该文件被直接运行时才会被执行,而不会在该文件被作为模块导入到其他文件时执行。这个语句块通常用于定义脚本的入口点。让我们通过一个简单的例子来解释其用......
  • pip install ale_python_interface 安装报错,ModuleNotFoundError: No module named 'a
    参考:https://www.cnblogs.com/hasakei/p/10035198.htmlhttps://blog.csdn.net/senjie_wang/article/details/84073823https://github.com/bbitmaster/ale_python_interface/issues/2https://blog.csdn.net/dream6985/article/details/127746687  ======================......
  • Kuberners 强制删除pod 强制删除Terminating的NAMESPACE 强制删除ns
    强制删除NAMESPACE[root@k8s-master1~]#catdelete.sh#!/bin/bashset-eopipefaildie(){echo"$*"1>&2;exit1;}need(){which"$1"&>/dev/null||die"Binary'$1'ismissingbutrequired"......
  • No module named 'sklearn'解决方案
    sklearn深度学习库官方网站,打开之后按需复制命令进行安装,此处只列出两个最常用的:windows下pip安装:pipinstall-Uscikit-learnLinux下pip安装:pip3install-Uscikit-learnwindows/linux下conda安装:condainstall-cconda-forgescikit-learn ......