2014-05-08 122 views
-1

從一個類是我的一個pygame遊戲的主菜單,我試圖調用一個函數。基本上,我有一本字典:Pygame菜單點擊功能

if __name__ == "__main__": 
    functions = {"start": main, "Quit": terminate} 

我具有這些調用在我的課,當點擊菜單項的方法是:

def runMenu(self): 
    mainloop = True 
    while mainloop: 

     self.__clock.tick(50) 

     for event in pygame.event.get(): 
      #print(pygame.mouse.get_pressed()) 
      if event.type == pygame.QUIT: 
       mainloop == False 
       terminate() 
      if event.type == pygame.MOUSEBUTTONDOWN: 
       for item in self.items: 
        #print(item.isMouseSelecting(pygame.mouse.get_pos())) 
        if item.isMouseSelecting(pygame.mouse.get_pos()): 
         #print(self.__functions) 
         self.__functions[item]() #initialized in the __init__ so that it              holds my dictionary in self.__functions 

但是,我不能調用每一個的對象引用我的功能(主,並終止)。我不知道如何解決這個問題。我看到一個例子,其中的人通過self.__ functionsitem.text調用函數,但是這對我不起作用,因爲我無法在.text方法上找到任何內容,並在執行此操作時得到屬性錯誤。

這是我的錯誤我有什麼上面:

Traceback (most recent call last): 
    File "/Users/tjleggz/Documents/CS 110/squirrel/squirrel.py", line 501, in <module> 
    game.runMenu() 
    File "/Users/tjleggz/Documents/CS 110/squirrel/squirrel.py", line 138, in runMenu 
    self.__functions[item]() #cant call bc its not same object, just a ref to object or [email protected] 
KeyError: <__main__.MenuItem object at 0x29758c8> 
>>> 

謝謝!

+0

[Pygame綁定菜單項的功能(點擊)]的可能重複](http://stackoverflow.com/questions/23505226/pygame-binding-menu-items-to-functions-by-clicking) – sloth

回答

0

我希望我能正確理解這個問題;從回溯看起來好像你的self.items包含MenuItem對象,而不是你的字典的關鍵字。您可以通過幾種方式解決此問題,例如,您可以在初始化時爲每個MenuItem屬性配置一個text屬性,您可以稍後使用item.text進行檢查。

一個更好的,少冗餘的方式做到這一點(而不是使用功能的字典像你現在)可能是一個on_click功能傳遞給每MenuItem比如你做,然後你只需要編寫

if item.isMouseSelecting(pygame.mouse.get_pos()): 
    item.on_click() 
+0

我'我不確定你的意思是什麼......這是我的第一個編程課。你能舉個例子嗎?是on_click pygame的一部分,或者你的意思是創建我自己的? – user3610000