在開始之前,我知道有很多問題聽起來很像這個問題,但是我的問題有點不同......所以這裏是...在導入的文件中調用主腳本中的函數
由於標題可能建議,我試圖在導入的模塊中調用main.py腳本中定義的函數。但是,這種情況與通常的進口情況有點不同。我最近在pygame上做了很多工作,並決定創建一個包含按鈕,文本,聲音等類的模塊。但我希望這個文件是通用的,所以它可以用於我製作的任何遊戲或應用程序。按鈕通常具有繪製函數和類似的東西,所以我可以輕鬆地將這些變量傳遞到函數中而沒有問題。問題出現在我想要檢查按鈕是否被點擊的部分,以及它是否做了某些事情。我想設置它,以便我可以傳入一個命令的字符串參數,並在其上使用eval()命令(python 2.7)。但是,它會拋出未定義函數的錯誤。我知道這是爲什麼,但我想看看是否有任何事情可以解決此問題,以儘可能保持模塊「通用」。下面是一組基本的代碼來幫助解釋我想要做什麼。
module1.py
class Button(object):
def __init__(self,x=0,y=0,image=None,command=""):
self.x = x
self.y = y
self.image = image
self.command = command
"""
Image this part filled with draw commands and stuff...
These functions work perfectly fine
"""
#Now here is the issue - local is mouse position
def checkClick(self, local):
#If statments here to determine if mouse over button and
#if mouse is clicked... The part below fails
eval(self.command)
main.py
import module1
import pygame
def quitgame():
pygame.quit()
quit()
local = pygame.mouse.get_pos()
b = module1.Button(command="quitgame")
#At this point lets assume that the mouse is overtop the button and the
#following function in the button will run
b.checkClick(local)
的錯誤,因爲我狀態之前說我嘗試調用該函數沒有定義。我找到了一個解決方法,所以我不想告訴我如何改變這個問題,因此它不會將命令作爲輸入。然而,我想要做到這一點,所以我可以輸入一個命令作爲參數。也許我不是按照我應該的方式輸入命令,但是我想這樣做,特別是因爲tkinter模塊允許您輸入命令作爲輸入/變量。也許沒有辦法像我所希望的那樣做到這一點,但我確實希望儘可能保持這些代碼的可重用性,而不需要在遊戲間進行任何更改,而且我寧願不必在每次我將遊戲/應用程序放入遊戲/應用程序時讓他們(就像我之前提到的代碼示例所說的只是一個例子,我的實際按鈕代碼比我上面做的要大得多)。就像我之前所說的那樣,我知道有很多問題就像這個問題一樣,但是他們根本沒有幫助我解決這個問題。其他人建議使用導入的腳本以及包含附加變量等的腳本,但我寧願不這樣做。此外,我有一個解決方法,徹底擺脫了這個問題,但它不像這樣簡單或容易。
一如既往,任何幫助將不勝感激,並提前感謝您的答案,以防我不立即回覆您。
函數是第一類對象蟒蛇。你可以直接把它們作爲參數傳遞 – Alik
說實話,我不完全確定問題是什麼,但我會發表一個答案。但是,Alik是正確的,函數是Python中的第一類對象。 –