2012-05-29 43 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。只有通过回调然后修改全局变量才能传递更改。