2017-10-15 88 views
-1

我正在用python编写一个kivy应用程序。我已经在同一个小部件(update和on_touch_down)中定义了两个函数。第二个函数是内建在“on_touch_down”函数中的第一个函数。这个想法是当用户点击屏幕时调用第一个函数。然而,一旦我运行应用程序,然后点击屏幕时,收到错误消息:为什么我收到名称错误:函数未定义

File : "main.py", line 57, in on_touch_down 
    update() 
NameError: name 'update' is not defined 

这里是代码导致了问题:

class childWidget(Widget): 
    def update(): 
     for s in range(len(root.markers)): 
      root.map.remove_marker(root.marker[s]) 
     root.markers.clear() 
     cursor.execute("SELECT * FROM aircraft;") 
     new_table = cursor.fetchall() 

     for row in new_table(): 
      markers.append(MapMarker(lon= row[2], lat=row[1], source='if_plane-b_86362.png')) 
      root.map.add_marker(MapMarker(lon= row[2], lat=row[1], source='if_plane-b_86362.png')) 

    def on_touch_down(self,touch): 
     update() 
+2

因为它是对同一个对象的方法,请尝试'self.update()'。 – jonrsharpe

+2

一个类没有定义新的作用域。由于'update'并不是在'on_touch_down'内部本地定义的,查找名字的下一个地方是全局范围(或​​者更具体地说,定义了'childWidget'的范围),而不是在'class '声明。 – chepner

+0

@jonrcharpe当我这样做时,我得到的错误:更新()需要0位置参数,但1给出。 – Flower

回答

1

您必须更改以下行:

2号线在创建update()方法:

def update(self): 

和第14行,当你调用方法:

self.update() 
相关问题