You need to enable JavaScript to run this app. Tkinter类无法访问self.story1等属性但self.window无报错的原因查询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 06:15:07