鱼C论坛

 找回密码
 立即注册
查看: 2143|回复: 5

tkinter中用grid_forget()清除控件失败

[复制链接]
发表于 2020-6-4 15:33:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
tkinter中用grid_forget()清除控件失败

设置了两个label,分别是C和lab1,
其中lab1的text是用了stringvar()变量设置的,而lC的text是直接赋值的常量,

后面用grid_forget()清除,lab1的控件清除成功,但C的失败了,是因为text的常/变量属性吗?因为我自己只发现这两个lab的设置区别

报错信息如下:

Traceback (most recent call last):
...
c.grid_forget()
AttributeError: 'NoneType' object has no attribute 'grid_forget'

说C标签没有grid_forget属性,但同样的写法lab1却可以?


---------代码-----------------------------
c=tk.Label(root,text="中文语义").grid(row=0,sticky=tk.E+tk.S)
ch = tk.StringVar()

lab1=tk.Label(root, textvariable=ch,),
lab1.grid(row=0,column=1,sticky=tk.E+tk.W+tk.S)

.
.
.

lab1.grid_forget()#删除题目控件,成功
c.grid_forget()#删除题目控件,失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 15:36:09 | 显示全部楼层
发个完整代码~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 16:11:29 | 显示全部楼层

啊,因为代码处于草稿阶段写 的很乱,中间def的function也多,不太容易读,除了我自己,所以没贴完整的上来。还有是读取了csv文件,不把这些打包,也不能顺利调试,不好找问题原因。

先谢谢愿意回答的朋友了。

然后,我持续百度时,终于找到原因了,是别人讲bind的写法注意事项得到的启发。
不是stringVar的关系,是控件后直接加grid()的原因,拆开分行写就OK了
测试已经成功了。
为了帮助其他人,我把别人的经验也贴上来吧。
作为新手,这些书写格式的讲究地方感觉最难,到处都是坑。
-------------正解------------------------------
其中bind函数是定义在Misc类里面的,也就是说,这个bind可以被绝大多数组件类所使用

注意:若使用bind,则布局必须写在bind后无法会报AttributeError错

b = Button(root, text='确定').grid(row=2, column=1, stick=E)
b.bind('<Button-1>', reg)

此写法是错误的,执行结果会报AttributeError: 'NoneType' object has no attribute 'bind'

正确写法:

b = Button(root, text='确定')
b.bind('<Button-1>', reg)
b.grid(row=2, column=1, stick=E)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 16:13:06 | 显示全部楼层
epass 发表于 2020-6-4 16:11
啊,因为代码处于草稿阶段写 的很乱,中间def的function也多,不太容易读,除了我自己,所以没贴完整的上 ...

嗯嗯  很强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 20:52:30 | 显示全部楼层
c=tk.Label(root,text="中文语义").grid(row=0,sticky=tk.E+tk.S)
c=tk.Label(root,text="中文语义")
c.grid(row=0,sticky=tk.E+tk.S)
这样写可不可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-4 22:09:02 | 显示全部楼层
jia159753 发表于 2020-6-4 20:52
c=tk.Label(root,text="中文语义").grid(row=0,sticky=tk.E+tk.S)
c=tk.Label(root,text="中文语义")
c.g ...

对,就是这样,把第一行放一起的grid()拆开成第2、3行的样式,这样控件后面要再加别的 操作都可以,否则很容易报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表