Python 为tkinter条目创建“类”`
我正在尝试为泛型Python 为tkinter条目创建“类”`,python,tkinter,Python,Tkinter,我正在尝试为泛型条目实例创建一个类 我使用self.statuslist来更改它的值(自动更新的一部分) 但是,一些非常奇怪的事情发生了,我找不到它的起源: 创建名为status的函数,以更改每个条目值。当该函数的名称更改为任何其他名称时-我收到以下错误消息: Traceback (most recent call last): ####updated for entire traceback #### File "schedualer.py", line 271, in <modu
条目
实例创建一个类
我使用self.status
list来更改它的值(自动更新的一部分)
但是,一些非常奇怪的事情发生了,我找不到它的起源:
创建名为status
的函数,以更改每个条目
值。当该函数的名称更改为任何其他名称时-我收到以下错误消息:
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
调用时,我得到错误信息:
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"
您有两个名为
status
:一个方法和一个包含列表的实例变量。一个将凌驾于另一个之上;你需要不同的名字
虽然我不确定为什么您首先需要这个方法,因为它只返回变量。您应该完全删除该方法
编辑2
重要提示:您忘记将self
参数添加到类sched\u条目中定义的函数中
python中实现方法\uuuu getitem\uuuu()
的对象,如字典和列表,当您说:
self.status=[]
status是一个列表,因此它有\uuu getitem\uuuuuuuuuuu()
,但您也会说:
def status(self):
return self.status
当出现问题时,如果一个方法(在本例中为status)没有\uuu getitem\uu()
,则必须重命名其中一个,您可以执行以下操作:
def get_status(self): #here goes the self parameter
return self.status
编辑
最重要的是,在看到编辑后,忘记添加()
,这就是python实际执行方法的方式,如果不添加它,则只获取方法的引用,而不获取方法的执行和结果(在您的情况下,列表状态)
虽然名字是一样的,但效果很好。当我确实将def status()
更改为def stat()
时,我得到了描述的错误显示不起作用的代码,而不是起作用的代码。但是就像我说的,你根本不需要这个方法。这是什么意思?如果您需要有关不起作用的代码的帮助,请显示不起作用的代码。不要显示工作正常的不同代码。另外,始终显示完整的回溯。这是因为您以前从未调用过该方法,而是引用了重写该方法的实例变量。现在,您正在引用该方法,但仍然没有调用它,因为调用方法需要括号:get\u stat()
。但是,第三次,你不需要这个方法,你应该删除它;直接参考self.status
实例变量。确定。。。。所以当我打电话给status时,我实际上是从self.status获得状态的?hmmmas回答了前面的回答-当我更改名称时(正如您所建议的),给出了那个错误。@Guy.D,您能添加完整的代码并进行修改吗?还有一个例子,当您初始化objet sched_条目时?@Guy.D我现在理解了您的错误,您忘记了添加(),这实际上是python调用方法并执行的方式it@Guy.D,如果写入sched_条目。get_status()
和sched_条目。get_status
,则第一个条目将返回self.status,第二个将返回方法get_status(不执行它,将返回对象方法)@Guy.D是的,忘记在def中添加self参数,是def get_stat(self):。。。请阅读完整的最新答案,希望对您有所帮助
def get_status(self): #here goes the self parameter
return self.status
sched_entries.get_status()[r-1][c].set(sch_file[r][c])