为tkinter创建`class``Entry`

时间:2017-07-13 08:36:35

标签: python tkinter

我正在尝试为通用class个实例创建Entry

我使用self.status列表来更改它的值(自动更新的一部分)。

但是,一些非常奇怪的事情发生了,我找不到它的起源:

创建名为status的函数,以便更改每个Entry值。当该函数的名称更改为任何其他时 - 我收到此错误消息:

Traceback (most recent call last):    ####updated for entire traceback ####
File "schedualer.py", line 271, in <module>
sched_entries.get_stat[r-1][c].set(sch_file[r][c])
TypeError: 'method' object is not subscriptable

任何想法为什么?

这是类代码。

class sched_entry (object):
  def __init__(self,master,r1,c1,offr,offc,bg1=["yellow"]):
    self.status=[]
    for r in range(r1):
        newrow=[]
        for c in range(c1):
            v=StringVar()
            z=Entry(master,relief=SUNKEN,width=cell_width,bg=bg1,textvariable=v,justify='center')
            z.grid(row=r+offr, column=c+offc)
            newrow.append(v)
        self.status.append(newrow)
  def status():           ###### when change to stat():   ---> I get the error
    return self.status

我在调用时收到错误:

for r in range(1,tasks_total+1):   #update table with schdule.csv data
for c in range (len(sched_headers)-1):
    sched_entries.stat[r-1][c].set(sch_file[r][c]) ### error when method changed to "stat"

2 个答案:

答案 0 :(得分:5)

您有两个名为status的东西:一个方法和一个包含列表的实例变量。一个会超越另一个;你需要不同的名字。

虽然我不确定你为什么要首先使用该方法,因为它只返回变量。你应该完全删除那个方法。

答案 1 :(得分:2)

  

编辑2

重要提示:您忘记将self参数添加到类sched_entry中定义的函数中。

python中实现方法__getitem__()的对象,比如字典和列表,当你这么说时,问题出现了:

self.status=[]

状态是一个列表,因此它有__getitem__(),但您也会说:

def status(self): 
    return self.status

并且出现问题,你是一个方法(在这种情况下是状态),没有__getitem__(),所以,你必须重命名其中一个,你可以这样做:

def get_status(self): #here goes the self parameter
    return self.status
  

修改

最重要的是,在看到编辑之后,忘记添加(),这就是python实际执行方法的方法,如果你不添加它,你只需获得方法的引用,但不是执行及其结果(在您的情况下,列表状态)

sched_entries.get_status()[r-1][c].set(sch_file[r][c])