2012-05-29 2 views
0

파이썬 2.7에서 전역 변수를 다른 모듈로 변경하려고합니다. 이전과 비슷한 상황에서이 작업을 수행했지만 어떤 이유로이 인스턴스에서는 작동하지 않습니다. 첫 번째 파일은 프로그램을 실행하는 파일입니다. 전역 변수를 설정하고 선택한 옵션에 따라 변수를 변경합니다. 아래에 약간의 코드를 붙여 넣었습니다. runnerMod :모듈 간 파이썬 전역 변수 변경하기

import Tkinter 
from main_mod import* 

choice = "0" 

def main(): 
    main_mod=functOne() 

class GUI(Tkinter.Tk): 
    def __init__(self, parent): 
     Tkinter.Tk.__init__(self, parent) 
     self.parent = parent 
      self.initialize() 

    def initialize(self): 
     self.grid() 
     self.update() 
     btnOption1 = Tkinter.Button(self, text=u"Option 1", command=self.onButtonClick) 
     btnOption1.grid(column=0, row=1) 

    def onButtonClick(self): 
     selection = "1" 
     self.destroy() 
     exec 'choice=%s' %selection in globals() 
     main() 

class menuSelection: 
    def OPTIONCHOSEN(self): 
     return choice 

if __name == "__main__": 
    app = GUI(None) 
    app.mainloop 

나는 runnerMod.py에서의 선택이라는 이름의 전역 변수는이 모듈에 이월하고 싶다. main_mod는 :

from runnerMod import menuSelection 

def functOne(): 
    userInput = menuSelection().OPTIONCHOSEN() 
    print userInput 

글로벌 변수 선택은 0에서 시작하지만, 나는 runnerMod.py 모듈에서 1로 변경하려면이이 main_mod.py 모듈에 반영합니다. 기존 프로그램에 대한 인터페이스를 다시 작성하기 때문에 옵션은 코딩 된 방식이 약간 제한됩니다. 누구든지 여기에 아이디어가 있습니까?

+2

왜 eval을 사용하여'choice'를 수정하고 있습니까? 왜 단순히 '글로벌 선택'과 '선택 = 선택'이 아닌가? 'menuSelection'이 정상적으로 작동해야하기 때문에 물어 봅니다. 그래서 값이 실제로 변경되지 않았다고 생각합니다. – msvalkon

+0

내가 알 수있는 한 똑같은 결과입니다. 나는 프로그램의 다른 곳에서 코드와 일치하기 때문에 eval을 사용하고있다. 어느 쪽이든 그것은 전역 변수를 변경하지만 그 변경을 다른 모듈에 전달하지 않습니다 – Joe

+0

그럼 내가 틀린 것이 확실합니다. 코드를 사용하여 두 모듈 사이의 변수를 수정하고 가져올 수 있습니다. 내 파이썬 2.7.3, 중요하지 않은 경우 확실하지 않습니다. – msvalkon

답변

1

runnerMod.py에서 프로그램을 시작한 모듈이기 때문에 전역 변수에 변경 사항을 전달할 수 없었습니다. 내가 할 일은 runnerMod.py를 사용하여 프로그램을 시작한 다음 main_mod.py에서 함수를 호출하는 것입니다. 이 함수는 runnerMod.py의 클래스에 BACK을 호출하고 GUI를로드했습니다. 다시 호출하고 전역 변수를 수정 한 후에 만 ​​변경 사항을 전달할 수 있습니다.