2012-05-29 46 views
0

我試圖從全局變量進行到Python2.7中的另一個模塊的更改。 我以前在類似的情況下做過這個,但由於某種原因,它在這種情況下不起作用。 第一個文件是運行程序的文件。它會設置一個全局變量並根據所選的選項對其進行更改。我粘貼了下面的一些代碼。 runnerMod:更改模塊之間的Python全局變量

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

然後我不確定哪裏出了問題。我可以用你的代碼修改和攜帶兩個模塊之間的變量。我的Python是2.7.3,不知道它是否重要。 – msvalkon

回答

1

事實證明,我無法將更改從runnerMod.py傳遞到全局變量,因爲它是啓動程序的模塊。我必須做的是使用runnerMod.py來啓動程序,然後在main_mod.py中調用一個函數。該函數在runnerMod.py中將BACK命名爲BACK,並加載GUI。只有通過回調然後修改全局變量才能傳遞更改。