2014-02-07 35 views
0

我目前正在使用python编写一个CFD程序,该脚本在计算中使用了大量预定义的全局变量。使用GUI输入变量并在Python中运行脚本

我想制作一个GUI,允许用户输入所有这些变量,然后运行脚本并在主控制台中返回结果。我曾尝试使用Tkinter来做到这一点,但无法找到设置全局变量的方法。

下面是一个简单的GUI,我尝试过设计完成一个更简单的计算,也需要设置全局变量。

'''GUI 2''' 
import Tkinter 
factor = 10 

def GUIrun(n): 
    return n * factor 

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

    def initialize(self): 
     self.grid() 

     self.entryVariable = Tkinter.StringVar() 
     self.entry = Tkinter.Entry(self,textvariable=self.entryVariable) 
     self.entry.grid(column=0,row=0,sticky='EW') 
     self.entry.bind("<Return>",self.OnPressEnter) 
     self.entryVariable.set("n") 

     button=Tkinter.Button(self,text="Run",command=self.OnButtonClick) 
     button.grid(column=1,row=0) 

     self.labelVariable = Tkinter.StringVar() 
     label=Tkinter.Label(self,textvariable=self.labelVariable, 
     anchor="w",fg="white",bg="blue") 
     label.grid(column=0,row=1,columnspan=2,sticky='EW') 
     self.labelVariable.set("Hello!") 

     self.grid_columnconfigure(0,weight=1) 
     self.resizable(True,False) 
     self.entry.focus_set() 
     self.entry.selection_range(0, Tkinter.END) 

    def OnPressEnter(self,event): 
     n = self.entryVariable.get() 
     self.labelVariable.set("n = " +self.entryVariable.get()) 
     self.entry.focus_set() 
     self.entry.selection_range(0, Tkinter.END) 


    def OnButtonClick(self): 
     n=self.entryVariable.get() 
     return GUIrun(n) 


if __name__=="__main__": 
    app=simpleGUI(None) 
    app.title('poster') 
    app.initialize() 
    app.mainloop() 

我希望得到任何帮助 谢谢

+0

你的问题是什么?为什么你需要全局变量?如果你确实有一个脚本使用了很多全局值,我认为你应该重写并将它们包装在一个类中。 –

回答

1

Tkinter的是不超过相对于全局变量任何其他模块不同。只需将变量声明为全局变量,然后将其设置为某个值。

您的代码正在工作,但我不确定它正在做你想做的事。如果你想要做数学题,你需要输入值转换为整数:

def OnButtonClick(self): 
    n=int(self.entryVariable.get()) 
    ... 

你的另一种选择是使用IntVar,而不是StringVar将做转换为你。

另一个问题似乎是对Tkinter工作原理的根本误解。您的OnButtonClick函数正确地调用具有适当参数的函数,然后返回结果。你认为它返回到哪里?没有任何代码需要从按钮命令返回值。

您需要对结果进行一些操作 - 将其打印出来,传递给另一个函数或设置一个变量。在按钮回调中调用返回类似于抛弃结果。

相关问题