Tkinter类无法访问self.story1等属性但self.window无报错的原因查询
问题根因分析
- 属性找不到的核心原因是
__init__方法内的执行顺序错误:你在调用self.__setwindow__()之后才初始化self.story1到self.story4四个实例属性,当__setwindow__内部访问这四个属性时,它们还没有被创建,自然会触发属性不存在的报错。而self.window是在调用__setwindow__之前完成赋值的,所以访问不会触发异常。 - 除此之外你的代码还存在隐藏的循环逻辑错误:
[len(i) for i in [self.story1, self.story2, self.story3, self.story4]]得到的是一个由4个整数组成的列表,你用for a,b,c,d in 列表的写法遍历,每次会取出单个整数尝试解包给4个变量,会触发解包失败的报错。
修复方案
调整__init__内的执行顺序,先完成所有实例属性初始化再调用__setwindow__,同时修正循环逻辑即可:
from tkinter import * class Main(Frame): def __init__(self, master=None): super().__init__() self.window = master # 先初始化列表属性 self.story1 = [""] self.story2 = [""] self.story3 = [""] self.story4 = [""] # 所有属性初始化完成后再调用配置窗口的方法 self.__setwindow__() def __setwindow__(self): self.window.geometry("300x500") self.title = Label(text="오늘 할일을 작성하시오.") self.title.place(x=80, y=30) # 直接解包长度列表即可,不需要遍历 a,b,c,d = [len(i) for i in [self.story1, self.story2, self.story3, self.story4]] print(a,b,c,d) ob = Tk() Main(master = ob) ob.mainloop()
内容的提问来源于stack exchange,提问作者famas kim
相关产品推荐
相关产品推荐

