2014-02-07 64 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函數正確地調用具有適當參數的函數,然後返回結果。你認爲它返回到哪裏?沒有任何代碼需要從按鈕命令返回值。

您需要對結果進行一些操作 - 將其打印出來,傳遞給另一個函數或設置一個變量。在按鈕回調中調用返回類似於拋棄結果。

相關問題