2017-10-15 76 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() 
相關問題