환경 (핵 프로그램이라는 그래픽 프로그램)에서 메뉴 항목을 추가하고 함수와 연결할 수있는 전역 개체가 제공됩니다. 이 전역 객체는 다음과 같이 작동합니다 :getattr()과 결합하여 동적으로 파이썬 모듈을 lambda :로 파이썬에서로드하는 방법?
menu.addCommand("Do This!", lambda: DoThings())
나는 동적으로 파이썬 모듈을 읽고 글로벌 메뉴 객체의 항목으로 모듈 함수를 추가하고 싶습니다. 나는 그것을하기 위해 수업을 썼다. 수업의 간략화 된 버전 :
class mymenu():
.
.
.
def _builMenuFromPath(self, basepath, module):
items = []
# ...
# there is code to build the items list. this is a list of the python filenames
# ...
if len(items) > 0:
for item in items:
try:
f = getattr(__import__(module + "." + item), item) # item is the python filename of an module in the folder with the python files and module is the folder
menu.addCommand(item, lambda: f.call()) # f.call() is a function in the dynamic loaded python file
except Exception, e:
pass
동적 가져 오기가 매우 효과적입니다. 그러나 생성 된 모든 메뉴 항목은 마지막으로 가져온 기능과 연결됩니다. 그래서 모든 menuitems는 똑같이합니다.
저는 전문 프로그래머가 아닙니다. 그래서 나는 단순한 실수를한다고 생각합니다.
도움 주셔서 감사합니다.
감사합니다. 그 작품! 나는 반나절을 잃는다. – Jonas
@Jonas이 답변에 제공된 설명을 살펴보십시오. – Marcin
@Jonas 언제든지. 질문에 대답 한 답변을 "대답 함"(해당 옆에있는 체크 표시)으로 표시하십시오. 그러면 귀하의 질문이 답변으로 표시됩니다. – Lanaru